Настройка 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