Мне нужно реализовать различные атрибуты метаданных для каждого маршрута, и одна из моих идей - применить атрибуты непосредственно на каждом маршруте, чтобы использовать внешний прослушиватель метаданных.Symfony: разрешить сервис по маршруту
Например, слушатель будет использовать службу (@example_title_resolver
), определенную на указанном ниже маршруте, для разрешения в какой-либо форме заголовка страницы.
example_route:
path: /blah/blah
defaults:
_controller: MyBundle:MyController:index
meta:
title:
resolver: '@example_title_resolver'
value: 'Example | %%value_to_be_resolved%% | %default_title_suffix%'
К сожалению, в то время как параметры решаются, я с тех пор обнаружил, что службы не работают. Единственный способ, связанный с этим подходом прямо сейчас, заключался бы в том, чтобы инжектировать контейнер службы непосредственно в слушатель и запрашивать службу, на которую нахмурились.
Есть ли лучшие альтернативы? Учитывая, что я действительно изо всех сил пытался узнать о разрешении услуг изнутри маршрутов, есть ли весь этот подход, чего следует избегать?
Я никогда не видел использование 'defaults' таким образом. Документировано ли это где угодно? – martin
В случае слушателей ядра инъекция контейнера считается приемлемой. По крайней мере, я. – Cerad
@Martin Не документировано нигде, только моя наивность ожидает его работы, заданные параметры разрешены (@see https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/Routing/Router. PHP # L87). Я мог бы использовать «опции» для этого, но такая же проблема. –