Afinogen
@Afinogen
PHP разработчик

Как правильно заменить ServiceLocator в ZF3?

Доброго времени суток!
При обновлении с ZF2 на ZF3 появляется ошибка ServiceLocatorAware deprecation, так как я в контроллере, в сервисах использую ServiceLocator. Вот один из примеров решения этой проблемы - сделать фабрику и в ней указать зависимости. Вроде все логично.
// Класс фабрики
class IndexControllerFactory implements FactoryInterface
{
    public function __invoke(ContainerInterface $container, 
                     $requestedName, array $options = null) 
    {
        // Извлечь экземпляр сервиса CurrencyConverter из менеджера сервисов.
        $currencyConverter = $container->get(CurrencyConverter::class);
        
        // Создать экземпляр контроллера и передать сервис в его конструктор.
        return new IndexController($currencyConverter);	
    }

Поясните пожалуйста, как мне быть в том случае если у контроллера около 10 зависимостей? Все пихать в конструктор? Это не очень понятно после использования ZF2.
Приведу пример, у меня есть контроллер управления заказами, в нем мапперы (не использую доктрину) Заказ, Табличная часть заказа, Скидки, Контрагенты, Договоры. А так же сервисы - работа с 1С и отправка на почту сообщений.
Если убрать ServiceLocator из контроллера, нужно создать приватные переменные под каждый маппер и сервисы, потом создать конструктор в который вставлять полученные из сервис менеджера объекты.
До каких размеров может разрастись конструктор? Не все мапперы и сервисы используются в каждом экшене, зачем мне лишнее?
Все гугление в интернете сводится к простому примеру из одной зависимости, а как использовать в больших проектах ни слова(
  • Вопрос задан
  • 387 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы