1

ZF2 を V2.1.4 に更新して、 Zend のドキュメントで説明されているように、Zend\Form クラスの init メソッドを使用して ServiceLocator を FieldSet に挿入できるようにします。

Global.php および Module.php ファイルには、データベース ドライバーとサービスの定義があり、ドキュメントについても説明しています。このサービスは、すべてのプロジェクトで問題なく動作します。

これは私のフィールドセットコードです:

    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() メソッド内では、 $this->serviceLocator は、コントローラーからサービスを取得するときのように Zend\ServiceManager\ServiceManager のインスタンスではありません。インスタンスは Zend\Form\FormElementManager のもので、var_dump を使用しています。私の Zend 構成のサービスがないことを確認してください。

DI を使用して Fieldset 内に Zend\ServiceManager\ServiceManager インスタンスを作成するにはどうすればよいですか?

私を助けてください。

4

3 に答える 3

2

次のように、サービス マネージャーのインスタンスを取得できます。

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

于 2013-03-30T09:07:27.827 に答える
0

ほとんどすべてのものをコンストラクターで注入する必要があります。私は次のようにします:

$form = new SomeForm($serviceManager)

SomeForm の内部:

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

    $this->add($fieldSet);
}

これは、基本的に好きなだけネストできます。これがどのように行われるかの良いドキュメントは

于 2013-03-29T19:01:57.810 に答える
0

FormElementManagersgetServiceLocator()メソッドを呼び出してみる

public function init() {
    var_dump($this->serviceLocator->getServiceLocator());
}
于 2013-03-29T19:02:24.080 に答える