Как Symfony инжектит Request в контроллер если он задан как параметр?

если написать так
public function indexAction(<b>Request $request</b>)
{

}


в методе будет доступен реквест
как сделать чтоб если метод

indexAction(Request $request, MyService $ms)

чтоб инстанс моего сервиса был автоматически проижекчен и доступен внутри метода?

и на сколько это хорошая практика инжектить в метод а не в контруктор?
  • Вопрос задан
  • 528 просмотров
Решения вопроса 1
myrkoxx
@myrkoxx
developer
Вот инфомация о том как ето происходит и где:
symfony.com/doc/current/components/http_kernel.htm...

Вот сам компонент который етим занят:
symfony.com/doc/current/create_framework/http_kern...

Вот пример оф. пример вашего случая:
symfony.com/doc/current/controller/argument_value_...

Чесно говоря не думаю, что ето хорошая идея инжектить в метод контроллера таким способом. Как по мне лучше обьявить контроллер как сервис или еще лучше использовать другой подход к контроллерам. По сути обработчиком запроса может быть любой php callable. Можете написать свой клас с проинжекчеными сервисами которые вам нужны.

Вот пример паттерна Action Domain Responder:
https://speakerdeck.com/dunglas/adr-pattern-autowi...

Вот сам бандл:
https://github.com/dunglas/DunglasActionBundle

Еще есть CommandBus:
https://github.com/thephpleague/tactician-bundle

P.S: извините за плохой руский
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
miraage
@miraage
Старый прогер
Отличная практика. А автоматический инжект делается за счет autowire.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы