转载

Yii2 菜单menu管理

前面写了一篇 Yii2-admin RBAC权限管理的实现 有朋友在评论里问了关于menu的使用,在这里我做一下统一的回答,稍微讲解一下我平时在项目中是怎么使用menu的。

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;

在数据库里的表现:

Yii2 菜单menu管理

在页面上的表现:

Yii2 菜单menu管理

使用方式:

<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  ], ]; 

最终显示结果:

Yii2 菜单menu管理

正文到此结束
Loading...