0

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

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

我将字段/过滤器和表单划分为不同的类,然后将它们聚集在表单的控制器中,如下所示:

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

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

谢谢你。

4

1 回答 1

1

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

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

  1. MyForm
    1.1 NestedFieldset
    1.2 AnotherFieldset

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

  1. MyFormInputFilter
    1.1 NestedFielsetInputFilter
    1.2 AnotherFieldsetInputFilter

一些示例代码:

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类中。

于 2017-01-26T08:30:58.940 回答