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()) {
...
}
...