在Zend Framework 2中使用配置文件设置ServiceManager

时间:2015-05-05 15:44:42

标签: zend-framework dependency-injection zend-framework2 servicemanager

我已阅读有关ServiceManager的ZF文档,并考虑配置(即使在“config”php文件中),如

public function getServiceConfig()
  {
    return array(
      'invokables' => array(
        'my-foo' => 'MyModule\Foo\Bar',
      ),
    );
  }

很长很冗长。而且,如果我有很多依赖项,我想使用某种自动代码生成来完成这项任务。

在Symfony中,我可以像这样编写YAML配置:

parameters:
    mailer.transport: sendmail

services:
    mailer:
        class:     Mailer
        arguments: ["%mailer.transport%"]
    newsletter_manager:
        class:     NewsletterManager
        calls:
            - [setMailer, ["@mailer"]]

它会自动编译为Symfony的PHP代码。是否有一些解决方案可以为ZF2做类似的工作?我不认为每个人都会写出DI代码而不是实际工作。

2 个答案:

答案 0 :(得分:1)

你可以连接Zend \ Config \ Reader \ Yaml来解析你的配置,但它们不会更加或更简洁,只是一种不同的格式。如果您更喜欢这种格式,请随意,但PHP数组非常灵活,对于这样的配置非常有用。

答案 1 :(得分:0)

您通常希望在模块的配置中连接它们(例如,module / Application / config / module.config.php)。

数组语法较短。

 return [
     'service_manager' => [
          'invokables' => [
               ...
           ],
      ],
 ];

使用:: class而不是类字符串,它确实清理了代码,并且可以直观地在整个应用程序中使用SL调用它们。只需放弃使用'在顶部的语句,和:: class away。

如果你要进入ZF2,请不要配置汗水。这是一个非常直观的事情,尽管最初连接组件可能要慢一些,但是一旦你进入它,你会发现ZF2比其他框架更容易使复杂的东西变得容易;可能是以让简单的事情变得更加冗长为代价。

参考:http://framework.zend.com/manual/current/en/modules/zend.service-manager.quick-start.html