如何从插件附加设置

问题描述 投票:0回答:1

我有一个非常基本的应用程序,它使用插件来实现大部分功能。我想允许每个插件定义一些自定义菜单和菜单项,将所有这些菜单收集在一个地方(可能是 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
就会被覆盖。

我不确定这是否是最好的方法。我试图实现的是让多个模块更改(附加)相同的配置变量

php cakephp-3.0
1个回答
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 控制器,这意味着您可以对导航执行更多操作,例如在输出导航项之前检查权限。

通过挂钩引导程序,您还可以灵活地包含或不包含插件导航,只需不加载引导程序,而不是先检查插件设置。

© www.soinside.com 2019 - 2024. All rights reserved.