3

フォームを作成するコントローラーをセットアップしています。拡張された Form クラスを使用できないため、コントローラーでフォームを構築する必要があります。

$form = new Form('example');
$fieldset = new Fieldset('default');
$fieldset->add(array('name' => 'example_field', 'attributes' => array('type' => 'text', 'id' => 'example_field'), 'options' => array('label' => 'Example Field',),));
$form->add($fieldset);

ここでの主な質問は、InputFilterAwareInterface を実装するクラスを作成する必要なく、各要素/フィールドセットのフィルターとバリデーターを定義して、コントローラーからすべてを実行できるようにするにはどうすればよいかということです。

前もって感謝します!

4

2 に答える 2

2

フォームの InputFilter を処理することで、フォームバリデーターを追加/削除できます。これが私の例です:

$form = new \Zend\Form\Form();
$name = array(
        'name' => 'username',
        'options' => array(
            'label' => 'Your name',
        ),
        'attributes' => array(
            'type'  => 'text'
        ),
);
$form->add($name);


$filter = $form->getInputFilter();
$filter->remove('username');
$filter->add(array(
    'name' => 'username',
    'required' => true,
    'validators' => array (
        'stringLength' => array (
            'name' => 'StringLength',
            'options' => array (
                'max' => '3',
            ),
        ),
    ),
));
$form->setInputFilter($filter);


$form->setData(array(
    'username' => 'longtext',
));
$form->prepare();
echo $form->isValid(); //false
print_r($form->getMessages()); //stringLengthTooLong error will show
于 2012-11-28T07:31:21.443 に答える