讨论 技术讨论 ModStartBlog如何修改后台内置的菜单?

ModStartBlog如何修改后台内置的菜单?

sigool 发表于    阅读:83    回复:0

问题描述:

ModStartBlog如何修改后台内置的菜单?

环境信息:

用的是: ModStartBlog 稳定版 v10.0.0       PHP:7.0.9 版本

分享

如果愿意出钱的话,其实很好解决的,我看官方就有模块:AdminMenuConfig 这个模块,好像就是解决修改后台菜单的。

不过像我时间又不紧而且是边用边学边用的,就自己研究了下,分享下自己的一个方法吧:


官方提到菜单的就是:

我们点开AdminMenu类看一看

可以看到register方法就是简单的追加记录了要渲染的菜单信息,到时候渲染前要计算要用就通过get方法取出来。

官方说的 ,菜单注册写在  app/Admin/Core/ModuleServiceProvider.php 的boot方法里。当一个请求运行

到 app/Admin/Core/ModuleServiceProvider.php 的boot方法执行我们菜单注册时,系统之前就已经对一些内置的菜单进行注册了。

比如:


我现在想将博客管理这个菜单弄成不是折叠的就是没有子菜单,直接一点击就链接到博客列表页面。我们得先知道系统是怎么注册了?

在 module/Blog/Core/ModuleServiceProvider.php 文件 同样 boot方法 我们看到:

正是因为这个博客模块的 ModuleServiceProvider就是比我们那个执行早的,所以它提前注册了博客管理的菜单信息。也就是

 AdminMenu类里的私有静态变量 $menu已经有系统注册的博客管理信息了。

但我们想直接修改又不行,毕竟它是私有的,我们没法外部修改。

而且这个类里没有公开方法给我们间接修改玩转这个私有静态变量的值,不然我们可以直接对之前注册东西都修改一番了。

30002_plqw_3633.png

我想到直接粗暴的方法就是用 PHP的反射技术,通过反射技术,也可以直接对一个类的私有静态变量的值进行访问修改了,这正是我们想要的。

这时候刷新,你肯定报500的。因为点击后链接到的操作方法我们设置为了

\App\Admin\Controller\BlogController@index

但这个操作还没注册路由,所以渲染时要获取菜单链接根本不知道要拼接的路由地址是什么,laravel查不到就报错了

我们按原来博客模块用的路由地址来绑定这个操作吧。

在module/Blog/Admin/routes.php文件,可以看到博客模块注册的一些路由

我是复制博客列表和新增这两个功能路由信息,然后黏贴在我们的路由文件里并只修改下控制器部分,因为我想重写下博客模块里的

列表和新增这两个功能。

按照官方说的,我们自己的路由写在:app/Admin/routes.php

因为我们自己的路由文件也是比模块的路由文件晚执行的,所以我们复制过去只修改控制器部分,就会覆盖掉系统先声明的路由操作了,

所以接下来,我们要做的就是创建我们这个控制器文件并且继承原来博客模块里的这个功能控制器。因为操作名我们是没有改动的,所以

通过继承,在我们的控制器就不用显式声明这些操作方法了。

我们就可以愉快的耍了

这样我们既修改了后台的内置菜单,就可以对其功能的CRUD逻辑进行一些更改了。

最后效果:

一点击就是跳转到列表页面了,我还对列表页面的CRUD进行了更改




我来评论
QQ
微信
客服

.