2013-12-17 2 views
0

Может ли файл конфигурации Symfony DI создать сервис обслуживания? Я имею в виду что-то в духе следующей сути:Symfony вложенные услуги

services: 
    authenticator: 
     class: Acme\Foo 
     arguments: [@foo, @parser.users] 
    parsers: # not valid, this would not compile 
     users: 
      class: Csfd\Parsers\User 
     messages: 
      class: Csfd\Parsers\Message 

Я хотел бы определить все parsers как услуги, но я также хочу, чтобы иметь их под parsers ветви, так что очевидно, что они на самом деле не представляют (также существует) User или Message объектов.

В этом примере @parser.users разрешит экземпляр Csfd\Parsers\User.

ответ

2

По умолчанию это невозможно. «Проблема» находится здесь: YamlFileLoader.php.

Как вы можете видеть, он не поддерживает вложенность и рассматривает первый уровень под «услугами» как служебный идентификатор.

Вы можете создать свой собственный YamlFileLoader, который будет поддерживать это и использовать его в классе расширения вашего пакета.

+0

Хорошо, спасибо, сделаю. Какой позор это частный метод. –

+0

Для справок: простой патч YamlFileLoader работает достаточно хорошо https://gist.github.com/Mikulas/8004470 –

+0

Действительно. Хотя они сделали 'parseDefinitionNode' частным, поэтому расширение и переопределение этого не может быть сделано, и его редактирование не является вариантом, поскольку оно находится в поставщиках и будет перезаписано при первом обновлении. –

Смежные вопросы