Проверка вложенных данных ZF2

Я пытаюсь заставить мою проверку работать. У меня есть данные, отправленные на контроллер в формате, как это:

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

Я разделил поля / фильтры и форму на разные классы и просто собрал их вместе в контроллере формы, который выглядит так:

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

Но он не работает должным образом, похоже, что он просто игнорирует вложенный массив (или игнорирует все). Что я пропустил?

Спасибо.

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 классы.

Другие вопросы по тегам