由于输入筛选器,ZF2 表单未验证


ZF2 form doesn't validate because of input filter

在 ZF2 中,我有一个控制器,其操作适用于这样的表单

if ($request->isPost()) {
    $this->organizationForm->setInputFilter(new OrganizationFilter());
    $this->organizationForm->setData($request->getPost());
    if ($this->organizationForm->isValid()) {
        // further logic to process

InputFilter OrganizationFilter是这样的

class OrganizationFilter extends InputFilter
{
public function __construct()
{
    $this->add([
        'name' => 'id',
        'filters' => [
            ['name' => 'Int'],
        ]
    ]);
    $this->add([
        'name' => 'name',
        'required' => true,
        'filters' => [
            ['name' => 'StripTags'],
            ['name' => 'StringTrim'],
        ],
        'validators' => [
            [
                'name' => 'StringLength',
                'options' => [
                    'encoding' => 'UTF-8',
                    'min' => 3,
                    'max' => 160
                ]
            ]
        ]
    ]);
}
}

如果我$this->organizationForm->setInputFilter(new OrganizationFilter())注释该行,则表单将得到验证,但是使用此行,它不起作用。

如何验证?

我不知道为什么我的代码不起作用,但我用另一种方式解决了它。对于要验证的输入的表单,我实现了InputFilterProviderInterface.然后在表格中,getInputFilterSpecification()

public function getInputFilterSpecification()
{
    return [
        'name' => [
            'required' => true,
            'filters' => [
                ['name' => 'StripTags'],
                ['name' => 'StringTrim'],
            ],
            'validators' => [
                [
                    'name' => 'StringLength',
                    'options' => [
                        'encoding' => 'UTF-8',
                        'min' => 3,
                        'max' => 160
                    ]
                ]
            ]
        ],
    // other inputs to filter
    ];
}

定义要验证的所有输入。通过此实现,我不必在控制器中显式设置过滤器,只需调用$this->form->isValid(),奇迹就会发生。:-)