ZF2 嵌套数据验证



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

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

我将字段/过滤器和表单划分为不同的类,并将其收集在表单的控制器中

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

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

谢谢。

您需要设置输入过滤器,就像设置表单(包括字段集)一样,如果您使用 InputFilter 类。

因此,当您拥有以下结构时:

  1. MyForm
    1.1 嵌套字段集
    1.2 另一个字段集

输入筛选器需要具有相同的结构:

  1. MyFormInputFilter
    1.1 NestedFielsetInputFilter
    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 的重要部分是,在使用 InputFilter 类中使用:$this->add($input, $name = null)时,您需要重用字段集的名称。

最新更新