ZF2 嵌套数据验证

ZF2 nested data validation

我正在尝试进行验证。我已将数据以如下格式发布到控制器:

[
    'property' => 'value',
    'nested_property' => [
        'property' => 'value',
        // ...
    ]
]

我已将 fields/filters 和表单分成不同的 类,然后将它们集中在表单的控制器中,如下所示:

public function __construct($name, $options)
{
    // ...
    $this->add(new SomeFieldset($name, $options));
    $this->setInputFilter(new SomeInputFilter());
}

但它不能正常工作,看起来它只是忽略了嵌套数组(或忽略了所有内容)。我错过了什么?

谢谢。

如果您使用 InputFilter class.

,则需要像设置表单(包括字段集)那样设置输入过滤器

所以当你有这样的结构时:

  1. 我的表格
    1.1 嵌套字段集
    1.2 另一个字段集

您的输入过滤器需要具有相同的结构:

  1. MyFormInputFilter
    1.1 嵌套字段集输入过滤器
    1.2 另一个字段集输入过滤器

一些示例代码:

class ExampleForm extends Form
{
    public function __construct($name, $options)
    {
        // handle the dependencies
        parent::__construct($name, $options);

        $this->setInputFilter(new ExampleInputFilter());
    }

    public function init()
    {
        // some fields within your form

        $this->add(new SomeFieldset('SomeFieldset'));
    }
}

class SomeFieldset extends Fieldset
{
    public function __construct($name = null, array $options = [])
    {
        parent::__construct($name, $options);
    }

    public function init()
    {
        // some fields
    }
}

class ExampleInputFilter extends InputFilter
{
    public function __construct()
    {
        // configure your validation for your form

        $this->add(new SomeFieldsetInputFilter(), 'SomeFieldset');
    }
}

class SomeFieldsetInputFilter extends InputFilter
{
    public function __construct()
    {
        // configure your validation for your SomeFieldset
    }
}

因此,为这些情况配置您的 inputFilter 的重要部分是您需要在使用时重用您的字段集的名称:$this->add($input, $name = null) 在您的 InputFilter classes 中。