menu表是根据权限来控制后台菜单的显示和隐藏的。
先来看看表结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
-- ----------------------------
-- 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;
在数据库里的表现:
在页面上的表现:
使用方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<
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下配置
1
2
3
4
5
6
7
8
9
|
return
[
'adminEmail'
=>
'admin@example.com'
,
'mdm.admin.configs'
=> [
'db'
=>
'db'
,
'menuTable'
=>
'{{%yc_menu}}'
,
'cache'
=> null,
'cacheDuration'
=> 3600
],
];
|
最终显示结果: