2017-01-03 14 views
0

У меня есть некоторые вопросы относительно миграции zf2 на zf3 моего приложения. Я прошел через руководства по миграции и начал процесс миграции, как описано там.Миграция zf2 в zf3

В соответствии с руководством по миграции больше нет доступа к контроллеру. И я имел обыкновение использовать его в каждом и каждом действии контроллера, чтобы впрыснуть конфигурации массива переменного (расположенный в module.config.php), Учение MongoDB DocumentManager и Doctrine EntityManager в модели, где они необходимы. Теперь я получаю так много устаревших сообщений о предупреждениях, как показано ниже;

PHP Устаревшее: Использование Zend \ ServiceManager \ ServiceManager :: getServiceLocator устарела так v3.0.0; пожалуйста, используйте контейнер передается на завод вместо в /var/www/html/LeapX/vendor/zendframework/zend-servicemanager/src/ServiceManager.php на линии 169

Поскольку мне нужно получить доступ к config и введите Doctrine DocumentManager и Doctrine EntityManager в мои модели, мне пришлось позвонить $this->getServiceLocator() в мои контроллеры. Дайте мне знать, как решить эту проблему. Есть ли возможность напрямую вставлять эти зависимости в мои классы моделей? Должен ли я использовать фабрики для моделей?

И еще вопрос, когда дело доходит до фабрик относительно контроллеров. Должен ли я создать отдельную фабрику для каждого контроллера моего приложения? Существует довольно много контроллеров, распространяемых в пределах нескольких Модулей в приложении. Если я добавлю выделенную фабрику для каждого контроллера, число будет вдвое больше. Позвольте мне знать, как это сделать.

+0

Этот ответ можно найти здесь: [ServiceManager в ZF3] (HTTPS: //stackoverflow.com/questions/42168619/servicemanager-in-zf3) –

ответ

2

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

Вот блог от самого Мэтью по этому вопросу: https://mwop.net/blog/2016-04-26-on-locators.html

Другое объяснение от самого здесь парень (короче, может быть легче переваривать): https://github.com/zendframework/zend-mvc/issues/89

Я в настоящее время также в процесс попытки переноса проекта ZF2 (2.4.10) на ZF3 и сталкивается с той же проблемой.

Я лично согласен с рекомендацией явно определять зависимости ваших классов и контроллеров вместо (более) с использованием метода getServiceLocator(), хотя в зависимости от вашего кода рефакторинг большого количества кода для этой цели может показаться PITA.

С другой стороны, это, вероятно, может помочь (хотя, я не могу сказать точно, так как я не пробовал это сам): http://circlical.com/blog/2016/3/9/preparing-for-zend-f