判断菜单的显示
现在,我们只需要修改菜单的显示逻辑就可以。
在开发之前,我们先看一下app\Admin\bootstrap.php中我们加的代码。
admin_inject_section(Admin::SECTION['LEFT_SIDEBAR_MENU'], function () {
    $menuModel = config('admin.database.menu_model');
    $builder = Admin::menu();
    $html = '';
    foreach (Helper::buildNestedArray((new $menuModel())->allNodes()) as $item) {
        $html .= view('admin::partials.menu', ['item' => $item, 'builder' => $builder])->render();
    }
    return $html;
});
现在我们需要理解一下这段代码:
Admin::SECTION['LEFT_SIDEBAR_MENU'] 更改菜单栏的命令。
$menuModel = config('admin.database.menu_model'); 菜单栏数据模型地址。其实通过这个,可以玩出很多花样。在本章教程里,我们保持默认的菜单栏模型。
Helper::buildNestedArray((new $menuModel())->allNodes()),主要是这个,我们打印一下,发现打印出来的是顶级栏目的菜单。
而我们的目的,其实判断的就是顶级栏目,而不是二级栏目,所以我们只需要在这个上面做文章就可以。
比如,我们想只显示顶级菜单为系统的菜单和子菜单。那么在foreach循环里,通过以下判断就可以
            if ($item['title'] == 'Admin') {
                $html .= view('admin.partials.menu', ['item' => $item, 'builder' => $builder])->render();
            }
如果想排除系统菜单和下面的二级菜单。代码就是
            if ($item['title'] != 'Admin') {
                $html .= view('admin.partials.menu', ['item' => $item, 'builder' => $builder])->render();
            }
现在我们已经可以筛选菜单了。比如只显示系统菜单,和不显示系统菜单。
然后,我们在整理以下我们的需求:
 - 在
系统菜单下的二级菜单页面内,左侧只显示系统菜单和二级菜单。 
 - 如果当前页面不是
系统菜单下的二级菜单,那么左侧不允许出现系统菜单。 
针对这个需求,我们实现的思路如下:
 - 通过路由来判断左侧显示什么菜单。
 
 - 假如当前页面的路由,是
系统菜单下的路由,那么左侧只显示系统菜单。如果不是系统菜单的路由,那么就显示其他菜单。 
有思路就好办了,我们先定义一下,系统菜单下的二级菜单有哪些路由,我的是下面这些
        'admin/settings',
        'admin/auth/users',
        'admin/auth/roles',
        'admin/products',
        'admin/customfields'
我们把这些路由作为数组赋给一个变量
    $setting_menu = [
        'admin/settings',
        'admin/auth/users',
        'admin/auth/roles',
        'admin/products',
        'admin/customfields'
    ];
题外话,建议有时间的同学可以把这个开发成扩展,扩展的主要逻辑,也就是控制上面这个数组。并不复杂。
然后怎么获取当前页面的路由呢? 通过这个
request()->path()
我们也赋给一个变量:
$route = request()->path();
这时候,当前页面,是否是系统菜单下的页面,就很好判断了
in_array($route, $setting_menu)
最终,菜单分离的实现逻辑代码,就是这样子
    foreach (Helper::buildNestedArray((new $menuModel())->allNodes()) as $item) {
        if (in_array($route, $setting_menu)) {
            if ($item['title'] == 'Admin') {
                $html .= view('admin.partials.menu', ['item' => $item, 'builder' => $builder])->render();
            }
        }else {
            if ($item['title'] != 'Admin') {
                $html .= view('admin.partials.menu', ['item' => $item, 'builder' => $builder])->render();
            }
        }
    }
大功告成!现在试试,在系统菜单下的二级菜单内,左侧菜单就只有系统菜单。否则,左侧不出现系统和二级菜单。