1

我只是將我的ZF2更新爲V2.1.4,以便我可以使用Zend \ Form類的init方法將ServiceLocator注入到FieldSet中,如Zend documentation所述。Zend Framework 2將服務管理器注入字段集

我在Global.php和Module.php文件中定義了數據庫驅動程序和服務,該如何解釋documentation。這項服務在所有項目中都能正常工作

這是我的字段集代碼:

class UserFieldset extends Fieldset implements ServiceLocatorAwareInterface{ 
     protected $serviceLocator; 
      public function setServiceLocator(ServiceLocatorInterface $sl) { 
       $this->serviceLocator = $sl; 
      } 
      public function getServiceLocator() { 
       return $this->serviceLocator; 
      } 
      public function init() { 
       var_dump($this->serviceLocator); 
      } 

      public function __construct() { 
        ......... 
      } 

}

我的問題是後續:

內UserFieldset的:: init()方法,$這個 - >服務定位不像從控制器獲取服務時一樣,Zend \ ServiceManager \ ServiceManager的實例。 該實例是Zend \ Form \ FormElementManager並使用var_dump,請參閱它沒有任何我的Zend配置的服務。

如何在使用DI的Fieldset中使用Zend \ ServiceManager \ ServiceManager實例?

請幫幫我。

回答

0

你幾乎必須建構 - 注入你所有的東西。我這樣做如下:

$form = new SomeForm($serviceManager) 

內SomeForm:

public function __construct(ServiceManager $serviceManager) { 
    $fieldSet = new SomeFieldset($serviceManager) 

    $this->add($fieldSet); 
} 

可以嵌套這主要是深如你所願。如何這是所有做了很好的說明文件

+0

這個解決方案已經考慮過了,我想在不使用這個技術的情況下注入(如顯示Zend文檔版本2.1)。 – josepmra

+1

@josepmra你在調用表單本身的形式ServiceManager?接口在那裏,因爲可能在ZF的某個地方有一個初始化器,它會在構建之後調用getter。但是你需要從ServiceManager調用表單!然後注射將會發生。 – Sam

0

嘗試調用FormElementManager小號getServiceLocator()方法

public function init() { 
    var_dump($this->serviceLocator->getServiceLocator()); 
} 
+0

$ this-> serviceLocator-> getServiceLocator()爲null,FormElementManager在zend config中沒有任何聲明。 – josepmra

+0

你在模塊中實現了FormElementProviderInterface嗎? – Crisp

+0

是的,除了我有一個在Module :: getFormElementConfig()方法中定義的服務 – josepmra

2

你可以抓住服務管理instace這樣的:

public function init() { 
    // You will get the application wide service manager 
    $sm = $this->getFormFactory()->getFormElementManager()->getServiceLocator(); 

    // Now you can get things like the application configuration 
    $config = $sm->get('Config'); 
} 

注: 確保您的字段集是通過FormElementManager創建的。

+1

我使用fieldset作爲表單集合類型,這對我不起作用;它說:調用成員函數get()爲null。 – Aise

相關問題