1

Z372를 V2.1.4로 업데이트하여 Zend \ Form 클래스의 init 메소드를 사용하여 ServiceSet을 호출 할 수 있습니다. 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() { 
        ......... 
      } 

}

내 문제는 다음과 같습니다 :

내 FIELDSET 코드입니다 UserFieldset의 내부 :: 초기화

() 메소드는, $ this-는> serviceLocator은 아니다 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 documentation version 2.1). – josepmra

+1

@josepmra 당신은 폼 자체를 ServiceManager 형태로 호출하고 있습니까? 아마도 ZF의 어딘가에 건설 후 getter를 호출 할 초기화 기가 있기 때문에 인터페이스가 있습니다. 그러나 ServiceManager에서 Form을 호출해야합니다! 그러면 주사가 일어날 것입니다. – Sam

0

당신은이 같은 서비스 관리자 instace 잡을 수

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

FormElementManagergetServiceLocator() 방법 호출 시도 :

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을 양식 콜렉션 유형으로 사용하고 있는데,이 기능이 작동하지 않습니다. 그것은 말합니다 : 회원 함수를 호출 null에 대한 get(). – Aise