Как проверить вложенные поля в Zend Framework 2 без использования фабрики

У меня есть класс формы, который динамически создает поля с элементами / полями рекурсивно. Я делаю это, чтобы получить settings[general][rpp][value] в качестве имени ввода (например). Поля генерируются, потому что параметры определяются пользователем в файле XML.

Наборы полей создаются следующим образом:

 $fieldset = new Fieldset(...); $fieldset->add(...); $form->add($fieldset); 

Форма выводится правильно; все работает. Кроме того, мне нужна проверка.

Моя цель – определить валидаторы и фильтры для этих вложенных элементов. Я действительно запутался в том, как это работает – но похоже, что только форма сама определяет input_filter setInputFilter(...) и я не знаю, как заставить его распознавать рекурсию без заводских и проприетарных классов для полей вместо того, чтобы быть динамичным.

Я чист?

Благодарю.

Я выяснил, как сделать этот высокодинамичный тип формы с проверкой и фильтрами. Я объясню здесь этот гипотетический сценарий:

 // create a form instance and a filter instance $form = new Form(); $filter = new InputFilter(); // create a fieldset instance and another filter instance $fieldset_a = new Fieldset('general'); $fieldset_a_filter = new InputFilter(); // create element(s) to assign to fieldset $setting_1 = new Element('setting_1'); // create another input filter for element defining filters and validators $setting_1_filter = new InputFilter(array( 'name' => 'setting_1', 'required' => true, 'validators' => array(), // ... )); // add element to fieldset $fieldset_a->add($setting_1); // add fieldset to form $form->add($fieldset_a); // add element filter to fieldset filter $fieldset_a_filter->add($setting_1_filter,'setting_1'); // add fieldset A filter to main input filter $filter->add($fieldset_a_filter,'general'); $form->setInputFilter($filter); 

Таким образом, вы можете видеть, что вам нужно создавать фильтры ввода для каждого набора элементов и каждого набора полей, а затем работать обратно через них, добавляя их друг к другу до тех пор, пока не будет создан основной входной фильтр, и вы можете назначить его экземпляру формы.

Затем после использования $form->setData($this->request->getPost())$form->isValid() будут использоваться предоставленные валидаторы с именами ввода, такими как general[setting_1]

Этот ответ может быть в 100 раз более подробным, но это лучше, чем доступно для проверки динамического набора полей.

здесь, в документах ZF2 также объясняется http://framework.zend.com/manual/2.3/en/modules/zend.form.collections.html