ZF2验证与实体绑定的表单

时间:2015-01-14 11:57:11

标签: php validation doctrine-orm zend-framework2 fieldset

我使用以下方式将表单与Doctrine Entity绑定:

$form->bind($user);

表单正在使用Fieldsets。 然后我尝试将验证附加到表单:

$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-&gt; getMessages()尝试显示所有验证错误时,我得到一个空数组。

有没有人遇到过这个问题?

1 个答案:

答案 0 :(得分:0)

谢谢大家,我现在已经解决了这个问题。问题是由

的使用引起的
$form->setInputFilter()

以具有嵌套字段集的形式运行。在扩展Fieldset的类中有这个函数:

class UserFieldset extends Fieldset
{
    ...
    public function getInputFilterSpecification()
    {
        return [
            'field-name' => [
            ...
            ],
        ]
    }
}

该实施解决了我的问题。