【问题标题】:ZF2 Move code from module.config.php to module.phpZF2 将代码从 module.config.php 移动到 module.php
【发布时间】:2016-04-04 20:00:39
【问题描述】:

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

module.config.phpAcl 模块中:

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

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

对数组结构和我应该使用的方法有什么想法/提示吗?

非常感谢,

【问题讨论】:

    标签: php zend-framework zend-framework2


    【解决方案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;
        }
    }
    

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

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

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

    【讨论】:

    • 谢谢,它有效(即使我正在寻找更简单的解决方案)
    • @DavidL 这看起来可能很复杂,但这是 ZF2 的做法。当您更熟悉 ZF2 时,您会发现这是一个常见的解决方案。我修复了配置数组中的一个错误...
    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2015-11-12
    相关资源
    最近更新 更多