5

私が何か間違ったことをしているのか、それともこれがZF2のバグなのか疑問に思います。フォームにデータを設定しようとしているときは、それを検証してデータを取得しようとすると、それは単なる空の配列です。

問題を単純化するために、いくつかのクラスからこのコードを抽出しました

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

   $form->add(array(
        'name' => 'submit',
        'attributes' => array(
            'type'  => 'submit',
            'value' => 'Register',
        ),
    ));

    if ($this->getRequest()->isPost()) {

        $form->setData($this->getRequest()->getPost()->toArray());
        if ($form->isValid()) {

            echo '<pre>';
            print_r($form->getData());
            print_r($form->getMessages());
            echo '</pre>';
        }
    }

両方ともprint_r()空の配列を示しています。フォームからデータを取得せず、メッセージも取得しません。それは私のせいですか、それともZF2のせいですか?

4

1 に答える 1

7

@SamuelHerzogと@Samのおかげで、フォームにはすべての要素にinputFiltersが必要です。質問で説明されているフォームの場合、この短いコードで十分に機能します。

    $inputFilter = new InputFilter();
    $factory     = new InputFactory();

    $inputFilter->add($factory->createInput(array(
        'name'     => 'username'
    )));

    $form->setInputFilter($inputFilter);

要素にルールを設定する必要はありません。基本的に機能するには、inpoutFilterに追加する必要があります。デフォルトでは、どの要素にも必須フラグがあり、空白値であってはなりません。

于 2012-08-13T08:00:20.437 に答える