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

时间:2016-04-04 09:25:35

标签: php zend-framework zend-framework2

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

module.config.php模块中的

Acl

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

现在我想将参数传递给自定义Menu构造函数。我在ZF2世界中很新,但似乎我必须在module.php文件中创建某种服务。我试图将代码放入getServiceConfiggetViewHelperConfig方法但没有成功(自定义菜单未“使用”)。

我应该使用数组结构和方法的任何想法/提示吗?

非常感谢,

1 个答案:

答案 0 :(得分:1)

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

创建MenuFactory类:

<?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;
    }
}

现在您将菜单注册为工厂,而不是可调用

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

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