Я уже комментировал эту ветку, но она кажется мертвой, поэтому я открываю новую: Инъекция зависимостей Slim Framework 3
В сообщении выше объясняется, как передать Slims Container классу, который вы написали сами.
Тем не менее, OP спросил, возможно ли заставить Slim внедрять зависимости ALL в свои классы.
Мне также интересно узнать, есть ли способ сделать это, поскольку кажется, что это что угодно, кроме DRY, если вам нужно передать контейнер каждому классу, который вы хотите использовать.
Например, если я хочу использовать одну из функций Slim (например, выполнить перенаправление в одном из моих собственных классов), я не могу использовать это в соответствии с документацией:
$res->withStatus(302)->withHeader('Location', 'your-new-uri');
Потому что $res
(объект ответа) не входит в рамки моего класса, если только я не введу/не передам его.
Проблема в том, что если у меня есть, скажем, 100 классов, нужно ли мне передавать (или вводить) контейнер 100 раз? Это кажется очень, очень утомительным.
В таких фреймворках, как CakePHP, вы можете использовать «AppController», чтобы глобально делать подобные вещи, то есть определять вещи один раз и делать их доступными во ВСЕХ ваших классах. Слим не предоставляет такой функционал? Если нет, то это серьезный недостаток, имхо.
Правка. Я добавляю это из одного из своих комментариев, чтобы попытаться объяснить проблему подробнее:
Если вы посмотрите на учебник по первому приложению — http://slimframework.com/docs/tutorial/first-app.html — они добавляют соединение с базой данных PDO в контейнер.
Допустим, у меня есть 100 отдельных классов в подкаталоге (в примере есть каталог ../classes/) и я автоматически загружаю их в index.php, используя spl_autoload_register()
. Контейнер НЕ доступен ни в одном из этих классов.
Если бы мне приходилось передавать что-то 100 раз, каждый раз, когда я использую один из своих классов, только для того, чтобы получить соединение PDO (и это только один пример), тогда это делает код очень повторяющимся, то есть не СУХИМ.
__invoke
), Slimwill call it’s constructor with the container as the first argument
. - person Zimmi   schedule 21.10.2016