每个应用都会有自己的导航,为了让每个应用都能很方便共享自己的导航数据,我们需要一种良好的应用间导航共享机制,而这种机制就是程序内部可以访问的内部 api.

导航配置文件

导航配置文件就是用于配置应用有哪些导航api,此文件会返回一个数组,数组的子项就一个应用内部 api 链接的地址,但不用带应用名;导航配置文件是位于应用根目录下的nav.php文件,以 portal 应用为例,就是 app/portal/nav.php 文件内容如下:

  1. <?php
  2. return [
  3. [
  4. 'name' => '文章分类', //导航数据源名称
  5. 'api' => "Category/nav"
  6. ]
  7. ];

导航数据源

导航数据源的 api 就是一个应用内部链接,它位于应用的 api 层,现在我们来创建一个导航 api,拿上面的Category/nav举例:1.在app/portal 目录下创建api目录2.在app/portal/api目录下创建文件CategoryApi.php,内容如下:

  1. <?php
  2. namespace app\portal\api;
  3. use app\portal\model\PortalCategoryModel;
  4. class CategoryApi
  5. {
  6. /**
  7. * 分类列表 用于导航选择
  8. * @return array
  9. */
  10. public function nav()
  11. {
  12. $portalCategoryModel = new PortalCategoryModel();
  13. $where = [];
  14. $categories = $portalCategoryModel->where($where)->select();
  15. $return = [
  16. 'rule' => [
  17. 'action' => 'portal/List/index',
  18. 'param' => [
  19. 'id' => 'id'
  20. ]
  21. ],//url规则
  22. 'items' => $categories //每个子项item里必须包括id,name,如果想表示层级关系请加上 parent_id
  23. ];
  24. return $return;
  25. }
  26. }

每个导航 api返回的数据格式必须按如下格式:

  1. [
  2. 'rule' => [ // url生成规则
  3. 'action' => 'portal/List/index', //url生成对应操作路径
  4. 'param' => [ // url 生成的参数
  5. 'id' => 'id' // url生成参数1(键值 id 为 url 参数,值 id 表示url 参数的值来源于下面 items 里 item 的 id 属性)
  6. ]
  7. ],//url规则
  8. 'items' => $categories //每个子项item里必须包括id,name,如果想表示层级关系请加上 parent_id
  9. ];

原文: https://www.thinkcmf.com/docs/cmf/导航共享.html