#php #symfony #php-5.3
#php #symfony #php-5.3
Вопрос:
Вы можете получить доступ к (скажем) службе Doctrine внутри контроллера, используя:
$d = $this->getDoctrine()
теперь я хочу, чтобы мой контроллер вызывал другую функцию (в другом классе), и я хочу, чтобы этот класс имел доступ ко всем службам. Возможно ли это без передачи служб в качестве переменной?
Ответ №1:
Вы должны внедрить зависимые службы в свой класс или метод. Если вы думали о каком-то глобальном объекте, к которому вы могли бы получить доступ везде, то это неправильный путь (и вы не можете получить доступ к контейнеру таким образом). Вы бы пропустили весь смысл внедрения зависимостей.
Вы можете внедрить службы в свой класс двумя способами:
- Вручную
- Позвольте DIC сделать это
Первое решение требует, чтобы вы сами передали зависимость любым способом (конструктор, установщик, метод).
Более позднее решение означает, что вы определяете свой класс как сервис и позволяете контейнеру создавать его и внедрять зависимости. Это можно сделать, только если вы можете делегировать создание объекта DIC. Это невозможно сделать, например, с сущностями.
Будьте осторожны с внедрением всего контейнера. Это не лучшая практика. Вы бы ввели зависимость от целого контейнера, который может иметь разные службы в зависимости от конфигурации. Зависимости не были бы понятны.