0

ZF2 では、Text 要素を独自の要素でオーバーライドしました ( と呼びますMy\Form\Element\Text)。ここで、テキスト要素をフォームに追加すると、オーバーライドされたクラスではなくデフォルトになるようにしたいと思いますZend\Form\Element\Text

$this->add([
    'type' => 'text',
    'name' => 'to',
]);

'type' => 'My\Form\Element\Text'の代わりに使用できることはわかってい'type' => 'text'ますが、それを回避してデフォルトでカスタム要素を使用できるかどうかを調べようとしています。

私はこれらのテクニックの両方を試しました:

module.config.php

return [
    'form_elements' => [
        'invokables' => [
            'text' => 'My\Form\Element\Text',
        ],
    ],
];

Module.php

class Module {

    public function getFormElementConfig() {
        return [
            'invokables' => [
                'text' => 'My\Form\Element\Text',
            ],
        ];
    }
}

これらはどちらも機能しませんでした (まだ のインスタンスを取得していますZend\Form\Element\Text)。Zend\Form\Factory::create()メソッドが Zend バージョンの代わりにカスタム要素のインスタンスを作成するように、要素を登録する他の方法はありますか?

4

1 に答える 1

1

設定は正しいですが、カスタム要素を使用する際に注意すべき点がいくつかあります。詳しくはこちらのドキュメントをご覧ください

キャッチ1

Zend\Form\Form を拡張してフォーム クラスを作成する場合は、カスタム要素を __construct-or に追加するのではなく、init() メソッドに追加する必要があります。

キャッチ 2

フォーム クラスを直接インスタンス化するのではなく、Zend\Form\FormElementManager を通じてインスタンスを取得する必要があります。

于 2013-10-18T18:51:48.137 に答える