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()s 都显示空数组。我没有从表格中得到任何数据,也没有消息。是我的错还是Z​​F2的错?

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 回答