如何在插件中添加设置
问题描述:
我有一个非常基本的应用程序,它使用大部分功能的插件。我希望允许每个插件定义一些自定义菜单和菜单项,将所有这些菜单收集到一个地方(可能是AppController :: initialize),并创建一个数组,该数组将传递给main-menu.php元素,该元素将呈现完整的菜单。如何在插件中添加设置
我所做的到目前为止是在插件
# plugins/TestPlugin/config/menus.php
return [
'menus' => [
[
'header' => 'TestPlugin',
[
'title' => 'Click me!',
'href' => './',
],
[
'title' => 'Click me too!',
'href' => './',
]
]
]
];
负载的配置定义菜单:
# 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
正在被覆盖。
我不确定这是否是最好的方法。我试图实现的是多个模块更改(附加到)相同的配置变量
答
如果是我,我会使用生成导航的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控制器,这意味着您可以在导航中执行更多操作,例如在输出导航项之前检查权限。
通过挂钩引导程序,您还可以灵活地包含或不包含插件导航,只需要不加载引导程序,或者先检查插件设置。
我的问题是我用'Configure :: read('menus')加载插件的导航;'它会覆盖任何其他插件的'$ menu'变量。所以我正在寻找一种方法来加载'plugins/TestPlugin/menus.php'文件,该文件返回一个'$ menus'数组,而不覆盖任何已经存在的'$ menus'变量。 – karivolas
你已经错过了我在答案中使用'array_merge'。以便您可以以多维方式键入数组以适应您的额外导航数据。 –