Проверка вложенных данных ZF2
Я пытаюсь заставить мою проверку работать. У меня есть данные, отправленные на контроллер в формате, как это:
[
'property' => 'value',
'nested_property' => [
'property' => 'value',
// ...
]
]
Я разделил поля / фильтры и форму на разные классы и просто собрал их вместе в контроллере формы, который выглядит так:
public function __construct($name, $options)
{
// ...
$this->add(new SomeFieldset($name, $options));
$this->setInputFilter(new SomeInputFilter());
}
Но он не работает должным образом, похоже, что он просто игнорирует вложенный массив (или игнорирует все). Что я пропустил?
Спасибо.
1 ответ
Вам нужно настроить фильтр ввода так же, как вы настраиваете формы, включая наборы полей, если вы используете InputFilter
учебный класс.
Поэтому, когда у вас есть такая структура:
- MyForm
1.1 NestedFieldset
1.2 AnotherFieldset
Ваши входные фильтры должны иметь одинаковую структуру:
- 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
классы.