Yii2 菜单menu管理

9 篇文章 0 订阅

前面写了一篇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;

在数据库里的表现:


在页面上的表现:


使用方式:

<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 }} ?><br></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
    ],
];
最终显示结果:



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值