3

今まではモジュール内で入力フィルターをフォームにバインド、つまりフォーム内に要素を作成し、モジュール側の要素に入力フィルターを追加していました。

たとえば、この例を確認してください

現在、私のフォームのように、要件に応じてテキストフィールド要素を動的に作成しています

//Form
public function addNamesTextFieldElement($names)
    {
        foreach($names as $name)
        {
            $nameTextField = new Element\Text($name->getName());
            $nameTextField->setAttribute('type', "text");
            $nameTextField->setLabel($name->getName());

            $this->add($nameTextField );
        }
    }

このような動的に生成された要素に入力フィルターを追加/添付する最良の方法は何でしょうか。

4

1 に答える 1

0

私はおそらくこのアプローチを使用しませんが、既に InputFilter をフォームに割り当てていれば、次のような方法で機能します。

public function addNamesTextFieldElement($names)
{
    $factory     = new InputFactory();
    foreach($names as $name)
    {
        $nameTextField = new Element\Text($name->getName());
        $nameTextField->setAttribute('type', "text");
        $nameTextField->setLabel($name->getName());

        $this->add($nameTextField );

        $this->getInputFilter()->add(
            $factory->createInput(array(
                'name'     => $name->getName(),
                'required' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array(
                    array(
                        'name'    => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min'      => 1,
                            'max'      => 100,
                        ),
                    ),
                ),
            ))
        );
    }
}
于 2013-01-22T12:17:49.800 に答える