2012-08-14 48 views
0

我尝试验证的形式,但我不能得到错误消息。ZendFramework 2.0.0rc3表

//这是我的代码:

$form = new TestForm(); 
$form->setInputFilter(new TestFilter()); 
$data = array('id'=>'','email'=>'[email protected]'); 
$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) 

_

如何是可能的?该过滤器是好的,但我不能从形式的错误消息 可能是一个错误,或者我做错了什么?

全码:

TestFilter: _

<?php 
namespace mvc\filter; 
use Zend\InputFilter\InputFilter; 
use Zend\InputFilter\Factory as InputFactory; 

class TestFilter extends InputFilter 
{ 
     public function __construct() 
     { 
      $factory = new InputFactory(); 
      $this->add($factory->createInput(array('name'=>'id','required'=>true))); 
      $this->add($factory->createInput(array('name'=>'email','required'=>true))); 
     } 
} 
?> 

_

TESTFORM _
命名空间MVC \形式;
使用Zend \ InputFilter \ Factory;
使用Zend \ Form \ Element;
使用Zend \ Form \ Form;

class TestForm extends Form 
{ 
public function prepareElements() 
{ 
    $this->add(array( 
     'name' => 'id', 
     'attributes' => array( 
      'type' => 'text', 
      'label' => 'Your name', 
     ), 
    )); 

     $this->add(array( 
     'name' => 'email', 
     'attributes' => array( 
      'type' => 'email', 
      'label' => 'Your email address', 
      ), 
     )); 
    } 
} 
?> 

_

+0

是不是这个错误? “id is empty” – 2012-08-14 10:33:41

+0

是的错误ID是空的,但var_dump($ messagesForm)和var_dump($ messagesFilter)应该显示相同或不是? – user1597726 2012-08-14 10:40:46

+0

请提供与表单和筛选/验证相关的完整代码 - 很可能您不验证您的数据,因此您不会收到任何错误或值;) – Sam 2012-08-14 11:55:53

回答

0

我还没有ZF2还没有工作,但尝试添加validators到您的元素:

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

我修正了它,问题在于prepareElements()从来没有被调用,然后我在构造函数中编写了代码,现在正在工作。 – user1597726 2012-08-15 09:42:28

0

你必须指定 '验证器' 一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; 
} 
0

您可以通过从模型中检索输入过滤器,然后设置settin克它形式:

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