Как получить доступ к сервисам внутри неконтроллерной функции в Symfony 2 - PullRequest
0 голосов
/ 09 октября 2011

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

$d = $this->getDoctrine()

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

1 Ответ

4 голосов
/ 09 октября 2011

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

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

  • вручную
  • Пусть DIC сделает это

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...