2016-08-13 10 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; 
    } 

nullの場合、このためにスローされる例外がある:それは例外がスローされる理由はnullのServiceLocatorは

上のgetの

コール()、私は把握できませんでしたか? ServiceLocatorAwareInterfaceServiceLocatorを注射していますか?

+1

"...これは例外です。" ...いつですか?どのようにこのクラスに電話していますか?サービス・ロケータは、サービス・マネージャがクラスをインスタンス化している場合にのみ注入できます。 –

答えて

1

ServiceLocatorAwareInterfaceは、ServiceLocatorを注射したはずですか?

最新のバージョンのZF2では、このインタフェースは推奨されていません。

詳細については、this post on GitHubまたはthis stackoverflow questionもお読みください。

1

このサービスのインスタンス化にServiceManagerを使用していないため、これが起こっていると思います。

ServiceLocatorAwareInterfaceは、このサービスがServiceManagerで呼び出された場合にのみ機能します。

あなたがServiceManagerの外

new CustomSawException(); 

を使用する場合は、AwareInterfaceはのServiceLocatorを設定することはできません。

依存性がない場合は呼び出し可能、他の場合はファクトリとして宣言する必要があります。

関連する問題