每个应用都会有自己的导航,为了让每个应用都能很方便共享自己的导航数据,我们需要一种良好的应用间导航共享机制,而这种机制就是程序内部可以访问的内部 api. ## 导航配置文件 导航配置文件就是用于配置应用有哪些导航api,此文件会返回一个数组,数组的子项就一个应用内部 api 链接的地址,但不用带应用名; 导航配置文件是位于应用根目录下的`nav.php`文件,以 portal 应用为例,就是 `app/portal/nav.php` 文件 内容如下: ```php <?php return [ [ 'name' => '文章分类', //导航数据源名称 'api' => "Category/nav" ] ]; ``` ## 导航数据源 导航数据源的 api 就是一个应用内部链接,它位于应用的 api 层,现在我们来创建一个导航 api,拿上面的`Category/nav`举例: 1.在`app/portal` 目录下创建`api`目录 2.在`app/portal/api`目录下创建文件`CategoryApi.php`,内容如下: ```php <?php namespace app\portal\api; use app\portal\model\PortalCategoryModel; class CategoryApi { /** * 分类列表 用于导航选择 * @return array */ public function nav() { $portalCategoryModel = new PortalCategoryModel(); $where = []; $categories = $portalCategoryModel->where($where)->select(); $return = [ 'rule' => [ 'action' => 'portal/List/index', 'param' => [ 'id' => 'id' ] ],//url规则 'items' => $categories //每个子项item里必须包括id,name,如果想表示层级关系请加上 parent_id ]; return $return; } } ``` 每个导航 api返回的数据格式必须按如下格式: ```php [ 'rule' => [ // url生成规则 'action' => 'portal/List/index', //url生成对应操作路径 'param' => [ // url 生成的参数 'id' => 'id' // url生成参数1(键值 id 为 url 参数,值 id 表示url 参数的值来源于下面 items 里 item 的 id 属性) ] ],//url规则 'items' => $categories //每个子项item里必须包括id,name,如果想表示层级关系请加上 parent_id ]; ``` 添加完导航数据源,并增加导航共享配置文件后,就可以导航菜单添加或编辑时看到你的共享出来的导航数据了。