Настройка ServiceManager с файлами конфигурации в Zend Framework 2

Я прочитал документацию ZF о ServiceManager и думаю, что конфигурация (даже в "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"]]

И он автоматически компилируется в PHP-код Symfony. Есть ли какое-то решение для аналогичной работы для ZF2? Я не думаю, что все пишут тоны кода DI вместо реальной работы.

2 ответа

Решение

Вы можете подключить Zend\Config\Reader\Yaml для разбора ваших конфигов, но они не будут более или менее подробными, просто в другом формате. Если вы предпочитаете этот формат, не стесняйтесь, но массивы PHP чрезвычайно гибки и полезны для конфигурации, подобной этой.

Как правило, вы хотите подключить их в конфигурации вашего модуля (например, module/Application/config/module.config.php).

Синтаксис массива короче.

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

Используйте::class вместо строк класса, это действительно очищает код и делает его интуитивно понятным для вызова их с SL во всем приложении. Просто поместите оператор 'use' вверху и удалите::class.

Не переживайте, если вы заходите в ZF2. Это довольно интуитивная вещь в будущем, и, хотя поначалу может быть немного медленнее подключать компоненты, как только вы войдете в нее, вы обнаружите, что ZF2 делает очень сложные вещи проще, чем эти другие платформы; вероятно, за счет того, что простые вещи становятся более многословными.

ссылка: http://framework.zend.com/manual/current/en/modules/zend.service-manager.quick-start.html

Другие вопросы по тегам