Zend Framework 2 RC3 Zend\Form#getData()

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的问题?


数组是空的还是表单的值为空? - Sam
首先检查 print_r($_POST);print_r($this->getRequest()->getPost();,并提供它们以缩小您的问题。 - Samuel Herzog
@SamuelHerzog 两个都填好了。 - Andreas Linden
2
我猜你正在使用一个没有用户名/提交规则的标准输入过滤器。如果没有数据需要过滤/验证,那么就没有数据可以输出。使用InputFilter的工厂制定一些规则,将其添加到表单中,看看会发生什么! - Samuel Herzog
1
基本上这就是我的问题的核心。您需要验证表单数据。Zend\Form 不会输出任何未经验证的数据。验证器(针对每个表单元素)可以为空,但必须进行验证 :) - Sam
@Sam,我想说你是第一个 :) - Samuel Herzog
1个回答

7
感谢 @SamuelHerzog 和 @Sam 的贡献,表单需要为所有元素添加输入过滤器。对于提问中描述的表单,只需使用这个简短的代码即可使其正常工作。
    $inputFilter = new InputFilter();
    $factory     = new InputFactory();

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

    $form->setInputFilter($inputFilter);

对于元素,没有任何规则是必需的,只需要将其添加到inpoutFilter中即可基本工作。默认情况下,任何元素都具有必填标志,不得为空值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接