Dcat Admin 后台进入表单页面,左侧菜单栏失去选中状态,怎么解决?
图片一:此为表格页面正确的选中状态
图片二:此为表单页面,左侧菜单栏失去了选中状态。
问题: 求助如何设置,进入表单页面左侧菜单栏,也通样是选中状态?
我这里试了下是这样的:从列表页点新增跳到创建不会丢失选中,直接输链接回车去创建页会丢失选中。
打开菜单的blade模板menu.blade.php可以看到
判断是否选中的按钮是$builder->isActive($item) 这个方法,我们在去src/Layout/Menu.php找方法具体是如何判断的。
这里我把信息记录到日志里方便查看
可以看到uri其实就是菜单对应的链接uri,path就是当前地址,由于没有单独判断create、edit等情况,所以无法保持选中。那为啥从列表点进去是选中的呢?因为用了pjax局部加载,左边其实还是原来的。
解决办法:通过查看源码可以发现src/AdminServiceProvider.php中,$this->app->singleton(‘admin.menu’, Menu::class);这行将Menu注入到了单例容器里,因此只要新建一个子类Menu,然后继承dcat自带的Menu,接着重写isActive方法,对特殊路由判断处理。完事之后,到admin/bootstrap把容器里面的Menu替换成我们修改之后的就ok了。
我把判断逻辑改为从$path里面找uri,如果是以uri开头就返回真。