由于输入过滤器,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

InputFilterOrganizationFilter是这个

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() 即可发生奇迹。 :-)