Service Zend Framework 2是否覆盖现有服务?
我正在使用一个名为Service Zend Framework 2是否覆盖现有服务?,service,zend-framework2,Service,Zend Framework2,我正在使用一个名为goaliomemberme的zf2模块,现在我想通过自定义服务覆盖它的服务。或者,如果不可能,我想用我的配置覆盖Module.php。可能吗 在应用程序模块中。我在module.config.php中写了这一行: 'goaliomemberme\Service\RememberMe'=>'Application\Service\RememberMe' 提前谢谢 这正是建议将服务命名为返回的对象类型的原因。对象goaliomemberme\Service\RememberMe在
goaliomemberme
的zf2模块,现在我想通过自定义服务覆盖它的服务。或者,如果不可能,我想用我的配置覆盖Module.php。可能吗
在应用程序模块中。我在module.config.php中写了这一行:'goaliomemberme\Service\RememberMe'=>'Application\Service\RememberMe'
提前谢谢 这正是建议将服务命名为返回的对象类型的原因。对象
goaliomemberme\Service\RememberMe
在服务管理器中命名为goaliomemberme\u RememberMe\u Service
。你可以检查一下
因此,解决方案很简单,而不是:
'GoalioRememberMe\Service\RememberMe' => 'Application\Service\RememberMe'
写这个
'goaliorememberme_rememberme_service' => 'Application\Service\RememberMe'
正如Jurian所说,服务名称是
goaliomberme\u rememberme\u service
,它是在getServiceConfig()
方法中设置的。因此,我在应用程序模块的Module.php
文件中编写了以下代码:
$serviceManager->
setAllowOverride(true)->
setInvokableClass('goaliorememberme_rememberme_service', 'Application\Service\CustomRememberMe')->
setAllowOverride(false);
并且成功地用我的定制服务替换了它非常感谢Jurian的大力帮助 实际上,服务管理器首先运行一个方法“canonicalizeName()”,该方法“规范化”名称,如下所示:
覆盖现有服务的最快方法是在/config/autoload文件夹中创建一个*local.php或*global.php文件。(该文件夹在config/application.config.php中标识。)加载模块后,将处理该文件夹中的任何重写文件。如果您有重复的service manager密钥,则最后一个密钥将获胜。tnx。这正是我想要的。这里有一个错误:一个名为或别名为“goaliomberme\u rememberme\u service”的服务已经存在,不能被覆盖;请使用另一个名称…我认为这是因为Goalio在module类中的
getServiceConfig()
方法中设置了服务。您试图覆盖配置文件中的服务。如果您也将其放在服务配置方法中,这会解决问题吗?否则,请参阅此答案以覆盖现有服务:Slumiman非常感谢。我跟踪了你的链接,并将其与你的帖子相结合,发布了一个新的答案。非常感谢。