我使用以下方法将表单与教义实体绑定:
$form->bind($user);
表单正在使用字段集。然后我尝试将验证附加到表单:
$form->setInputFilter($userFormValidation->getInputFilter());
验证如下所示:
namespace User'Form;
use Zend'InputFilter'Factory as InputFactory;
use Zend'InputFilter'InputFilter;
use Zend'InputFilter'InputFilterAwareInterface;
use Zend'InputFilter'InputFilterInterface;
class UserFormValidation implements InputFilterAwareInterface
{
protected $inputFilter; // <-- Add this variable
// Add content to these methods:
public function setInputFilter(InputFilterInterface $inputFilter)
{
throw new 'Exception("Not used");
}
public function getInputFilter()
{
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'input-username',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 10,
'max' => 50,
),
),
),
)));
$this->inputFilter = $inputFilter;
}
return $this->inputFilter;
}
}
表单永远不会得到验证,当我尝试使用 $form->getMessages() 显示所有验证错误时,我得到一个空数组。
有人遇到过这个问题吗?
谢谢大家,我现在已经解决了这个问题。该问题是由使用
$form->setInputFilter()
函数,具有嵌套字段集的窗体。在扩展 Fieldset 的类中,有这个函数:
class UserFieldset extends Fieldset
{
...
public function getInputFilterSpecification()
{
return [
'field-name' => [
...
],
]
}
}
该实施解决了我的问题。