2015-09-30 4 views
3

Я пытаюсь получить доступ к функции getServiceLocator в модели. Он работает в контроллере, но когда я перемещаю его в модель, я получаю NULL при попытке доступа.Как получить доступ к getServiceLocator в модели ZF2

Call to a member function get() on null 

Казалось бы, ниже ссылка предложили сопоставимую решение, но у меня были проблемы с внедрением

Use another module in our custom helper in zend framework 2

Ниже приведен код, я пытаюсь запустить в модели.

use Zend\ServiceManager\ServiceLocatorAwareInterface; 
use Zend\ServiceManager\ServiceLocatorInterface; 

class FileManager implements ServiceLocatorAwareInterface { 

someFunction(){ 
    $thumbnailer = $this->getServiceLocator()->get('WebinoImageThumb'); 
    } 
} 

Спасибо M

ответ

7

Когда это вообще возможно, вы не должны пытаться получить доступ к этому ServiceLocator внутри любого класса, за исключением завода. Основная причина этого заключается в том, что если ServiceLocator вводится в ваш класс, вы теперь не знаете, что такое зависимости этого класса, потому что теперь он может потенциально содержать что угодно.

Что касается инъекции зависимостей, у вас есть два основных варианта: инсталляция конструктора или сеттера. Как правило, всегда предпочитайте инъекцию конструктора. Вставка Setter должна использоваться только для дополнительных зависимостей, а также делает ваш код более неоднозначным, потому что теперь класс изменен. Если вы используете чисто конструктор инъекции, ваши зависимости неизменны, и вы всегда можете быть уверены, что они будут там.

С помощью использования helpers вы будете использовать __invoke вместо __construct, чтобы ввести ваши зависимости.

См https://stackoverflow.com/a/18866169/1312094 для описания того, как создать класс для реализации FactoryInterface

Смежные вопросы