Динамические фильтры / валидаторы ZF2
Я настраиваю контроллер, который будет создавать форму. Я не могу использовать расширенный до класса Form, поэтому мне нужно создать свою форму на моем контроллере.
$form = new Form('example');
$fieldset = new Fieldset('default');
$fieldset->add(array('name' => 'example_field', 'attributes' => array('type' => 'text', 'id' => 'example_field'), 'options' => array('label' => 'Example Field',),));
$form->add($fieldset);
Основной вопрос здесь заключается в том, как определить фильтры и валидаторы для каждого элемента / набора полей без необходимости создания класса, реализующего InputFilterAwareInterface, чтобы я мог делать все с моего контроллера?
Заранее спасибо!
2 ответа
Вы можете добавить / удалить форму Validators, обрабатывая InputFilter формы, вот мой пример:
$form = new \Zend\Form\Form();
$name = array(
'name' => 'username',
'options' => array(
'label' => 'Your name',
),
'attributes' => array(
'type' => 'text'
),
);
$form->add($name);
$filter = $form->getInputFilter();
$filter->remove('username');
$filter->add(array(
'name' => 'username',
'required' => true,
'validators' => array (
'stringLength' => array (
'name' => 'StringLength',
'options' => array (
'max' => '3',
),
),
),
));
$form->setInputFilter($filter);
$form->setData(array(
'username' => 'longtext',
));
$form->prepare();
echo $form->isValid(); //false
print_r($form->getMessages()); //stringLengthTooLong error will show
Добавить валидатор динамически:
$form->getInputFilter()->get('element_name')->getValidatorChain()->attach(new ValidatorClassName());
Добавить фильтр динамически:
$form->getInputFilter()->get('element_name')->getFilterChain()->attach(new FilterClassName());