Php ZendFramework 2.0.0rc3表单

Php ZendFramework 2.0.0rc3表单,php,forms,validation,zend-framework2,Php,Forms,Validation,Zend Framework2,我尝试使用表单进行验证,但无法获得错误消息 //这是我的代码: $form = new TestForm(); $form->setInputFilter(new TestFilter()); $data = array('id'=>'','email'=>'myemail@myemail.com'); $form->setData($data); if($form->isValid()){ echo 'ok'; } else { echo 'not ok

我尝试使用表单进行验证,但无法获得错误消息

//这是我的代码:

$form = new TestForm();
$form->setInputFilter(new TestFilter());
$data = array('id'=>'','email'=>'myemail@myemail.com');
$form->setData($data);

if($form->isValid()){
    echo 'ok';
} else {
echo 'not ok <br/>';
$messagesForm = $form->getMessages();
$filter=$form->getInputFilter();
$messagesFilter=$filter->getMessages();
var_dump($messagesForm);
var_dump($messagesFilter);
}

/////////////////
Output
not ok
//messagesForm

    array
     empty
//MessagesFilter
    array
    'id' => 
    array
      'isEmpty' => string 'Value is required and can't be empty' (length=36)

_

我还没有使用过ZF2,但尝试添加到您的元素中:

use  Zend\Validator;
$this->add(array(  
    'name' => 'id',  
    'attributes' => array(  
        'type'  => 'text',  
        'label' => 'Your name',  
    ),
    'validator' => new StringLength(array('max'=>20))
));  
}  

您必须指定“验证器”,例如getInputFilter:

use
Zend\InputFilter\InputFilter,
Zend\InputFilter\Factory as InputFactory,
Zend\InputFilter\InputFilterAwareInterface,
Zend\InputFilter\InputFilterInterface;

class User implements InputFilterAwareInterface
{
public function getInputFilter()
{
    if (!$this->inputFilter) {
        $inputFilter = new InputFilter();

        $factory = new InputFactory();

        $inputFilter->add($factory->createInput(array(
            'name'     => 'email',
            'required' => true,
            'filters'  => array(
                array('name' => 'StripTags'),
                array('name' => 'StringTrim'),
            ),
            'validators' => array(
                array(
                    'name'    => 'StringLength',
                    'options' => array(
                        'encoding' => 'UTF-8',
                        'min'      => 1,
                        'max'      => 100,
                    ),
                ),
            ),
        )));
      $this->inputFilter = $inputFilter;        
    }

    return $this->inputFilter;
}

您可以通过从模型中检索输入过滤器,然后将其设置为表单来执行此操作:

...
$form = new ItemForm();
$form->setInputFilter($user->getInputFilter());
$form->setData($params);
if ($form->isValid()) {
  ...
}
...

这不是错误吗?“id为空”是的,错误id为空,但var_dump($messagesForm)和var_dump($messagesFilter)应显示相同或不相同?请提供与表单和筛选/验证相关的完整代码-很可能您没有验证数据,因此不会得到任何错误或值;)我修复了它,问题是prepareElements()从未被调用,然后我在构造函数中编写代码,现在开始工作。
use
Zend\InputFilter\InputFilter,
Zend\InputFilter\Factory as InputFactory,
Zend\InputFilter\InputFilterAwareInterface,
Zend\InputFilter\InputFilterInterface;

class User implements InputFilterAwareInterface
{
public function getInputFilter()
{
    if (!$this->inputFilter) {
        $inputFilter = new InputFilter();

        $factory = new InputFactory();

        $inputFilter->add($factory->createInput(array(
            'name'     => 'email',
            'required' => true,
            'filters'  => array(
                array('name' => 'StripTags'),
                array('name' => 'StringTrim'),
            ),
            'validators' => array(
                array(
                    'name'    => 'StringLength',
                    'options' => array(
                        'encoding' => 'UTF-8',
                        'min'      => 1,
                        'max'      => 100,
                    ),
                ),
            ),
        )));
      $this->inputFilter = $inputFilter;        
    }

    return $this->inputFilter;
}
...
$form = new ItemForm();
$form->setInputFilter($user->getInputFilter());
$form->setData($params);
if ($form->isValid()) {
  ...
}
...