我有一个非常基本的应用程序,它使用插件来实现大多数功能。我想允许每个插件定义一些自定义菜单和菜单项,在一个地方收集所有这些菜单(可能是AppController :: initialize),并创建一个将传递给main-menu.php元素的数组,它将呈现完整的菜单。
到目前为止我所做的是定义插件中的菜单
# plugins/TestPlugin/config/bootstrap.php
use Cake\Core\Configure;
Configure::load('TestPlugin.menus', 'default' , true);
加载配置:
# src/Controller/AppController.php
public function initialize()
{
parent::initialize();
$plugin_menus = Configure::read('menus);
阅读变量:
menus
但如果我有更多的插件,lastObject
将被覆盖。
我不确定这是不是最好的方法。我试图实现的是让多个模块更改(附加到)相同的配置变量
答案 0 :(得分:0)
如果是我,我会使用生成导航的View Cell。
在每个插件bootstrap.php
文件中,我将该插件附加到Configure
变量以添加它的导航。
Configure::write('navigation', array_merge(Configure::read('navigation'), $myNavArray);
然后在导航视图单元格中,我可以处理Configure
变量。
foreach (Configure::read('navigation') as $navItem) {
// Build nav, or output, etc
}
这样做的好处是,由于View Cell,您的导航在任何地方都是相同的。您还将拥有一个View Cell控制器,这意味着您可以在导航中执行更多操作,例如在输出导航项之前检查权限。
通过挂钩引导程序,您还可以灵活地包含或不包含插件导航,只需要不加载引导程序,然后再检查插件设置。