0

Я пытаюсь выполнить свою проверку. У меня есть данные размещены на контроллер в формате, как это:Проверка достоверности вложенных данных 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

Ваши inputfilters должны иметь ту же структуру:

  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 для таких ситуаций является то, что вам нужно повторно использовать имя вашего FIELDSET при использовании: $this->add($input, $name = null) в пределах ваших классов InputFilter.

+0

Спасибо @Kwido, теперь он работает правильно. – pandomic