zoukankan      html  css  js  c++  java
  • 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;

    在数据库里的表现:

    在页面上的表现:

    使用方式:

    <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方法,该方法用于获取用户对应的菜单信息.

      在configparams.php下配置

    return [
        'adminEmail' => 'admin@example.com',
        'mdm.admin.configs' => [
            'db' => 'db',
            'menuTable' => '{{%yc_menu}}',
            'cache' => null,
            'cacheDuration' => 3600
        ],
    ];
    

      最终显示结果:

     

  • 相关阅读:
    解决VMWARE NAT SERVICE服务无法启动或服务消失的问题
    Struts2+Spring+Hibernate框架整合总结详细教程
    Hibernate框架搭建实例
    spring官网下载
    LVS(一)调度原理以及调度算法
    HyperText Transfer Protocol
    Nginx(三) Nginx负载均衡以及反向代理
    Nginx(二) Nginx主机配置、日志分割、日志自动备份
    Nginx(一) Nginx安装
    Oracle VM VirtualBox(一) 快速拷贝一个新的虚拟机
  • 原文地址:https://www.cnblogs.com/qmsu/p/4891345.html
Copyright © 2011-2022 走看看