由于输入过滤器,ZF2表单无法验证

时间:2016-02-28 18:21:06

标签: php zend-framework2

在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())发表评论,表单会得到验证,但是使用此行时,它不起作用。

如何验证?

1 个答案:

答案 0 :(得分:0)

我无法弄清楚为什么我的代码不起作用,但我以另一种方式解决了它。对于要验证输入的表单,我实现了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()并发生魔法。 : - )

相关问题