2016-08-13 5 views
1
class CustomSawException extends Exception implements ServiceLocatorAwareInterface, SawExceptionInterface 
{ 
    protected $serviceLocator; 

    public function test(){ 
     $this->serviceLocator->get('SomeThing'); 
    } 

    /** 
    * Set service locator 
    * 
    * @param ServiceLocatorInterface $serviceLocator 
    */ 
    public function setServiceLocator(ServiceLocatorInterface $serviceLocator) 
    { 
     $this->serviceLocator = $serviceLocator; 
    } 

    /** 
    * Get service locator 
    * 
    * @return ServiceLocatorInterface 
    */ 
    public function getServiceLocator() 
    { 
     return $this->serviceLocator; 
    } 

Исключение, которое выбрасывается на это:ServiceLocator является нулевым

вызов Get() на нуль

Я не мог понять, почему он бросает исключение? ServiceLocatorAwareInterface следует ввести ServiceLocator?

+1

«... исключение выбрано для этого» ... когда? Как вы называете этот класс? Локатор сервисов может быть введен только в том случае, если диспетчер службы создает экземпляр класса. –

ответ

1

ServiceLocatorAwareInterface следует ввести ServiceLocator?

Я не уверен в этом, в последних версиях ZF2 этот интерфейс устарел.

Читайте также this post on GitHub или this stackoverflow question для получения дополнительной информации.

1

Я думаю, что это происходит, потому что вы не используете ServiceManager для создания этой службы.

ServiceLocatorAwareInterface работает только в том случае, если эта услуга вызывается через ServiceManager.

Если вы используете

new CustomSawException(); 

Вне ServiceManager, то AwareInterface не может установить это ServiceLocator.

Вы должны объявить эту службу как invokable, если она не имеет зависимостей или фабрик в другом случае.