Yii2 菜单menu管理
2015-11-14 09:03
627 查看
前面写了一篇Yii2-admin RBAC权限管理的实现 有朋友在评论里问了关于menu的使用,在这里我做一下统一的回答,稍微讲解一下我平时在项目中是怎么使用menu的。
menu表是根据权限来控制后台菜单的显示和隐藏的。
先来看看表结构:
这里详细介绍几个主要的字段:
name 是菜单的名称;
parent 是父类菜单的名称,留空则表示顶级菜单;
route 指的是菜单的URL;
在数据库里的表现:
![](http://images2015.cnblogs.com/blog/484513/201511/484513-20151109202854306-685615843.png)
在页面上的表现:
![](http://images2015.cnblogs.com/blog/484513/201511/484513-20151109203038978-549325944.png)
使用方式:
这里使用到啦yii2-admin下的MenuHelper类getAssignedMenu方法,该方法用于获取用户对应的菜单信息.
在config\params.php下配置
最终显示结果:
![](http://images2015.cnblogs.com/blog/484513/201511/484513-20151109203209384-1588537717.png)
menu表是根据权限来控制后台菜单的显示和隐藏的。
先来看看表结构:
-- ---------------------------- -- Table structure for yc_menu -- ---------------------------- DROP TABLE IF EXISTS `yc_menu`; CREATE TABLE `yc_menu` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(128) NOT NULL, `parent` int(11) DEFAULT NULL, `route` varchar(256) DEFAULT NULL, `order` int(11) DEFAULT NULL, `data` text, PRIMARY KEY (`id`), KEY `parent` (`parent`), KEY `name` (`name`), KEY `route` (`route`(255)), KEY `order` (`order`), CONSTRAINT `dh_menu_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `dh_menu` (`id`) ON DELETE SET NULL ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='系统管理员菜单权限表';
这里详细介绍几个主要的字段:
name 是菜单的名称;
parent 是父类菜单的名称,留空则表示顶级菜单;
route 指的是菜单的URL;
在数据库里的表现:
![](http://images2015.cnblogs.com/blog/484513/201511/484513-20151109202854306-685615843.png)
在页面上的表现:
![](http://images2015.cnblogs.com/blog/484513/201511/484513-20151109203038978-549325944.png)
使用方式:
<ul id="main-menu" class="main-menu"> <li class="<?php if (Yii::$app->controller->id == 'site'){echo 'active';}?>"> <a href="/site/index"> <i class="linecons-cloud"></i> <span class="title">HOME</span> </a> </li> <?php $i=0;foreach (MenuHelper::getAssignedMenu(\Yii::$app->user->id) as $k=>$p_menu) { if(!empty($p_menu['items'])){ $if_menu=0; $url=parse_url($_SERVER["REQUEST_URI"]); $url_arr = array_filter(explode("/", $url['path'])); $url_items=$item_arr=[]; //根据URL判断显示 foreach($p_menu['items'] as $val){ if($val['url'][0]){ $item_arr = array_filter(explode("/", $val['url'][0])); } $url_items[]=$item_arr[1]; } if(isset($url_arr[1]) && in_array($url_arr[1], $url_items)){ $if_menu=1; } ?> <li <?php echo $if_menu==1?'class="active"':''; ?>> <a href="<?php echo $p_menu['url']; ?>"> <i class="<?php echo $linecons[$i];$i++; ?>"></i> <span class="title"><?=$p_menu['label']?></span> </a> <?php if(!empty($p_menu['items'])){ ?> <ul <?php echo $if_menu==1?'style="display: block;"':''; ?>> <?php foreach ($p_menu['items'] as $c_menu) {?> <li> <a href="<?= $c_menu['url'][0] ?>"> <span class="title"><?= $c_menu['label'] ?></span> </a> </li> <?php } ?> </ul> <?php } ?> </li> <?php }else{ ?> <li> <a href="<?= $p_menu['url'][0] ?>"><i class="icon-bar-chart"></i><?=$p_menu['label']?></a> </li> <?php }} ?> </ul>
这里使用到啦yii2-admin下的MenuHelper类getAssignedMenu方法,该方法用于获取用户对应的菜单信息.
在config\params.php下配置
return [ 'adminEmail' => 'admin@example.com', 'mdm.admin.configs' => [ 'db' => 'db', 'menuTable' => '{{%yc_menu}}', 'cache' => null, 'cacheDuration' => 3600 ], ];
最终显示结果:
![](http://images2015.cnblogs.com/blog/484513/201511/484513-20151109203209384-1588537717.png)
相关文章推荐
- 配置phpmyadmin可以远程连接mysql
- php连接mysql配置
- PHP使用Pthread实现的多线程操作实例
- php实现的递归提成方案实例
- PHP实现的一致性哈希算法完整实例
- PHP使用PHPexcel导入导出数据的方法
- php经典算法集锦
- 基于JS实现PHP的sprintf函数实例
- 10个实用的PHP正则表达式
- 搭建FTP服务器
- JAVA+PHP+阿里云组件纯手工实现POP、SMTP、IMAP开发邮件服务器(一)
- (PHP)正则表达式-preg_grep函数用法
- thinkphp的_STORAGE_WRITE_ERROR_问题
- Log One(phpmyadmin中使用配置文件中定义的控制用户连接失败问题 )
- yii2关于View
- phpMyAdmin 高级功能未全部设置,部分功能不可用
- phpMyAdmin 高级功能未全部设置,部分功能不可用
- NTP服务器的搭建
- Log One(phpmyadmin中使用配置文件中定义的控制用户连接失败问题 :)
- Yii框架的一些系统函数