Как получить доступ к службам внутри функции без контроллера в Symfony 2

Вы можете получить доступ к (скажем) службе Doctrine внутри контроллера, используя:

$d = $this->getDoctrine()

теперь я хочу, чтобы мой контроллер вызывал другую функцию (в другом классе), и я хочу, чтобы этот класс имел доступ ко всем службам. Возможно ли это без передачи сервисов как переменных?


person semekh    schedule 09.10.2011    source источник


Ответы (1)


Вы должны внедрить зависимые службы в свой класс или метод. Если вы думали о каком-то глобальном объекте, к которому вы можете получить доступ везде, то это неправильный путь (и вы не можете получить доступ к контейнеру таким образом). Вы бы упустили весь смысл внедрения зависимостей.

Вы можете внедрить сервисы в свой класс двумя способами:

  • Вручную
  • Пусть этим занимается ДИК.

Первое решение требует, чтобы вы сами передавали зависимость в любом случае (конструктор, сеттер, метод).

Более позднее решение означает, что вы определяете свой класс как службу и позволяете контейнеру создавать его и внедрять зависимости. Это можно сделать только в том случае, если вы можете делегировать создание объекта в DIC. Например, это невозможно сделать с сущностями.

Будьте осторожны с инъекцией всего контейнера. Это не лучшая практика. Вы бы ввели зависимость от всего контейнера, который может иметь разные службы в зависимости от конфигурации. Зависимости не были бы ясны.

person Jakub Zalas    schedule 09.10.2011