ZF2 将代码从 module.config.php 移动到 module.php

ZF2 Move code from module.config.php to module.php

我在网上找到了一种使用以下方法声明自定义导航菜单的方法:

module.config.phpAcl 模块中:

'navigation_helpers' => array(
    'invokables' => array(
        'menu' => 'Acl\View\Helper\Navigation\Menu',
    )
),

现在我想将一个参数传递给自定义 Menu 构造函数。我是 ZF2 世界的新手,但似乎我必须在 module.php 文件中创建某种服务。我尝试将代码放入 getServiceConfiggetViewHelperConfig 方法但没有成功(自定义菜单不是 "used")。

有idea/hint数组结构和我应该使用的方法吗?

非常感谢,

为此,您应该将菜单注册为工厂,然后在工厂内实例化 class 时可以将参数传递给菜单:

创建 MenuFactory class:

<?php

namespace Acl\View\Helper\Navigation\Factory;

/**
 * Factory to create menu
 */
class MenuFactory implements FactoryInterface
{
    /**
     * {@inheritDoc}
     * @return Menu
     */
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $param = // get your param from servicelocator or create the parameter
        $menu = new Menu($param);
        return $menu;
    }
}

现在您将菜单注册为 factory 而不是 invokable:

'navigation_helpers' => array(
    'factories' => array(
        'menu' => 'Acl\View\Helper\Navigation\Factory\MenuFactory',
    )
),

如果您想阅读更多内容,那么有很多关于如何在 ZF2 中执行此操作的信息,例如 this article here