1

我想扩展标准 Zend\ModuleManager\ModuleManager,可以吗?例如,我想从数据库中加载模块列表,并且我想添加一些使用模块的方法。

如果我将工厂设置为 serviceManager:

'service_manager' => array(
    'factories' => array(
        'moduleManager' => 'Path/To/My/ModuleManager',
    ),
),

出现错误“名称或别名为“modulemanager”的服务已存在且无法覆盖,请使用备用名称”

4

1 回答 1

2

Zend Framework 2 中的模块管理器是通过服务工厂类创建的。ModuleManager正在映射到Zend\Mvc\Service\ModuleManagerFactory。我建议你看看这个ModuleManagerFactory,看看在模块管理器中注入了什么对象createService()

如果你想扩展和使用你自己的模块管理器,你必须创建一个扩展 ModuleManager 的类,同时创建一个覆盖 Zend\Mvc\Service\ModuleManagerFactory 的服务管理器工厂。您使用以下代码是正确的,但将此代码放在/config/application.config.php文件中很重要,因为这是 Zend\Mvc 用于创建主要服务的配置文件。

// config/application.config.php
'service_manager' => array(
    'factories' => array(
        'ModuleManager' => 'Path/To/My/ModuleManagerFactory', // <-- Path to MM factory
    ),
),

下面的链接将为您提供有关使用 \Zend\Mvc 运行哪些默认服务以及如何以及在何处发生这种情况的良好信息:

https://zf2.readthedocs.org/en/latest/modules/zend.mvc.services.html

希望这会有所帮助,反馈将不胜感激:)

斯托扬

于 2013-03-26T08:28:00.310 回答