Zend Framework 2 RC3 Zend\Form#getData()

And*_*den 5 php forms zend-form zend-framework2 zend-inputfilter

我想知道我做错了什么或者这是否是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>';
        }
    }
Run Code Online (Sandbox Code Playgroud)

两个都print_r()显示空数组.我没有从表单中获取任何数据,也没有任何消息.是我的错还是Z​​F2?

And*_*den 7

感谢@SamuelHerzog和@Sam,表单需要所有元素的inputFilters.对于问题中描述的形式,这个简短的代码足以让它完全起作用.

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

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

    $form->setInputFilter($inputFilter);
Run Code Online (Sandbox Code Playgroud)

它不需要对元素有任何规则,只需要添加到inpoutFilter就可以了.默认情况下,任何元素都具有必需的标志,并且不能是空值.