Вчера прочитал статью: https://igor.io/2012/11/09/scaling-silex.html
И еще один http://davedevelopment.co.uk/2012/10/03/Silex-Controllers-As-Services.html
Итак, в моей голове возник концептуальный вопрос:
В настоящее время у меня есть много контроллеров в отдельных классах. Я перезаписываю controller_resolver
для создания экземпляра класса контроллера и вставляю $app
в конструктор контроллера.
Я определяю маршруты, подобные этому $app->get('/hello', 'HelloController::indexAction')
‹- мой преобразователь контроллера создаст new HelloController($app);
- пока все хорошо. Но, если честно, это стало шаблоном ServiceLocator, а не DependencyInjection, потому что я ввожу весь $app
, который выглядит как использование ServiceLocator.
Теперь я в раздумьях: оставить как есть (потому что работает хорошо) или попробовать "контроллеры как сервисы" внедрять только те сервисы, от которых действительно зависит мой контроллер? Может быть, мой подход SeviceLocator когда-нибудь поразит меня? (люди говорят, что DI лучше для тестов).
Я также изучил Symfony Framework Bundle: класс Controller
расширяет абстрактный класс ContainerAware
, в который также вводится весь $container
! Подход ServiceLocator в рамках полного стека?
Любая рекомендация? За и против?