## 什么是后台菜单注解 为了方便在代码里进行后台菜单管理我们新增了`@adminMenu`和`@adminMenuRoot`两个自定义的注解,通过这个注解我们可以很轻松地在代码中管理后台菜单,比如菜单的名称,排序,是否显示,父级等;`@adminMenu`是方法级的注解,只对方法有效,每个后台控制器方法只支持一个`@adminMenu`注解,`@adminMenuRoot`是类级的注解,只有在给类注释时有效,每个后台控制器类可以支持多个`@adminMenuRoot`注解 ## 后台菜单入口注解`@adminMenuRoot` 下面以`app\admin\controller\SettingController`为例: ```php <?php namespace app\admin\controller; use cmf\controller\AdminBaseController; use think\Db; /** * Class SettingController * @package app\admin\controller * @adminMenuRoot( * 'name' =>'设置', * 'action' =>'default', * 'parent' =>'', * 'display'=> true, * 'order' => 10000, * 'icon' =>'cogs', * 'remark' =>'系统设置入口' * ) */ class SettingController extends AdminBaseController { /** * 密码修改 * @adminMenu( * 'name' => '密码修改', * 'parent' => 'default', * 'display'=> false, * 'hasView'=> true, * 'order' => 10000, * 'icon' => '', * 'remark' => '密码修改', * 'param' => '' * ) */ public function password() { return $this->fetch(); } } ``` 以上代码中,我们给 SettingController类增加了一个类级别的`@adminMenuRoot`注解,它的格式就是一个变形 php 数组,语法和 php 数组完全一样,数组里的属性就是这个后台菜单入口的属性, ``` /** * @adminMenuRoot( * 'name' =>'设置', // 菜单名称 * 'action' =>'default', // 菜单操作,这是一个虚拟的控制器操作,它不会在这个控制器有对应的方法 * 'parent' =>'',//菜单父级,格式有三种:应用名/控制器/操作,控制器/操作,操作 * 'display'=> true,//菜单是否显示 * 'order' => 10000,//菜单排序 * 'icon' =>'cogs',//菜单图标 * 'remark' =>'系统设置入口' //菜单备注 * ) */ ``` ## 后台菜单注解`@adminMenu` 同样以`app\admin\controller\SettingController`为例: ```php <?php namespace app\admin\controller; use cmf\controller\AdminBaseController; use think\Db; /** * Class SettingController * @package app\admin\controller * @adminMenuRoot( * 'name' =>'设置', * 'action' =>'default', * 'parent' =>'', * 'display'=> true, * 'order' => 10000, * 'icon' =>'cogs', * 'remark' =>'系统设置入口' * ) */ class SettingController extends AdminBaseController { /** * 密码修改 * @adminMenu( * 'name' => '密码修改', * 'parent' => 'default', * 'display'=> false, * 'hasView'=> false, * 'order' => 10000, * 'icon' => '', * 'remark' => '密码修改', * 'param' => '' * ) */ public function password() { return $this->fetch(); } } ``` 上面的代码中,我们给 `password`操作增加了一个方法级别的`@adminMenu`注解,它的格式也是一个变形 php 数组,语法和 php 数组完全一样,数组里的属性就是这个后台菜单的属性, ``` /** * @adminMenu( * 'name' => '密码修改', // 菜单名称 * 'parent' => 'default', //菜单父级,格式有三种:应用名/控制器/操作,控制器/操作,操作 * 'display'=> false, //菜单是否显示 * 'hasView'=> false,//菜单是否有界面 * 'order' => 10000, //菜单排序 * 'icon' => '', //菜单排序 * 'remark' => '密码修改', //菜单备注 * 'param' => '' //菜单额外参数,一般没有 * ) */ ``` ## 导入菜单 > 快捷方式中的菜单管理只在调试模式下才会显示,如果生产环境中要进行后台菜单管理,可以访问:`你的域名/admin/menu/index`,后台菜单管理主要是给开发者用的,所以生产环境中会隐藏。 ![](https://box.kancloud.cn/297e32e2e9adcc898254734832e08ef7_1298x748.png) 点上面的`导入新菜单`按钮,你在控制器里加的菜单注解就会自动变成后台菜单,你不用改什么菜单就会创建好了!