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

Setting up ServiceManager with configuration files in Zend Framework 2

我已阅读关于 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 代码而不是真正的工作。

您可以连接 Zend\Config\Reader\Yaml 来解析您的配置,但它们不会或多或少冗长,只是格式不同。如果您更喜欢这种格式,请随意,但是 PHP 数组非常灵活并且对这样的配置很有用。

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

数组语法更短。

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

使用 ::class 而不是 class 字符串,它真正清理了代码,并使在整个应用程序中使用 SL 调用它们变得直观。只需在顶部放置一个 'use' 语句,然后 ::class 即可。

如果您正在进入 ZF2,请不要担心配置。这是一个非常直观的事情,虽然一开始连接组件可能有点慢,但一旦你开始使用它,你会发现 ZF2 使非常复杂的事情比其他框架更容易;可能是以让简单的事情变得更冗长为代价的。

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