Добавить атрибут класса в ошибки формы

Я разрабатываю приложение с помощью Zend Framework 2, и я использую помощник FormRow для визуализации метки, ввода и ошибок (если они есть) в форме.

//within the view echo $this->formRow($form->get('Name')); 

Когда пользователь отправляет форму без заполнения поля ввода входного текста, FormRow визуализирует его со следующим сообщением об ошибке:

 <label> <span>Name: </span> <input class="input-error" type="text" value="" placeholder="Insert Name Here" name="Name"> </label> <ul> <li>Value is required and can't be empty</li> </ul> 

Как я могу установить класс для тега li, чтобы его стиль впоследствии?

Я знаю, что я могу повторить formElementErrors с требуемым атрибутом класса через ..

 <?php echo $this->formElementErrors($form->get("Name"), array('class' => "valuerequired", 'message' => "errortestmessage")); ?> 

… но FormRow все равно отобразит сообщение об ошибке без класса.

Только для справки Я устанавливаю объект таким образом:

 public function getInputFilter() { if (!$this->inputFilter) { $inputFilter = new InputFilter(); $factory = new InputFactory(); $inputFilter->add($factory->createInput(array( 'name' => 'Name', 'required' => true, 'filters' => array( array('name' => 'StripTags'), array('name' => 'StringTrim'), ), 'validators' => array( array( 'name' => 'StringLength', 'options' => array( 'encoding' => 'UTF-8', 'min' => 1, 'max' => 100, ), ), ), ))); $this->inputFilter = $inputFilter; } return $this->inputFilter; } 

Solutions Collecting From Web of "Добавить атрибут класса в ошибки формы"

См. Код формыElementErrors

В основном вы можете сделать что-то вроде:

 $this->formElementErrors($elem) ->setMessageOpenFormat('<ul%s><li class="some-class">') ->setMessageSeparatorString('</li><li class="some-class">'); 

Но это довольно неудобно …

Лучшим решением было бы расширить Zend \ Form \ View \ Helper \ FormElementErrors вашим собственным классом, а затем зарегистрировать элемент view-helperElementErrors для вашего класса. Так что в основном у вас было бы что-то вроде этого:

 namespace Mymodule\Form\View\Helper; use Zend\Form\View\Helper\FormElementErrors as OriginalFormElementErrors; class FormElementErrors extends OriginalFormElementErrors { protected $messageCloseString = '</li></ul>'; protected $messageOpenFormat = '<ul%s><li class="some-class">'; protected $messageSeparatorString = '</li><li class="some-class">'; } 

Последняя вещь должна была бы зарегистрировать помощника вида с этим новым классом. Для этого вы предоставляете следующий код внутри своих модулей Module.php

 public function getViewHelperConfig() { return array( 'invokables' => array( 'formelementerrors' => 'Mymodule\Form\View\Helper\FormElementErrors' ), ); } 

Смещение : этот код не проверен, дайте мне знать, если есть некоторые ошибки, но я думаю, что это должно получиться достаточно хорошо.

Хорошо, решение моей проблемы было прямо передо мной, вместо того, чтобы использовать:

 //within the view echo $this->formRow($form->get('Name')); 

Я называл каждый элемент формы индивидуально:

  //within the view echo $this->formLabel($form->get('Name')); echo $this->formInput($form->get('Name')); echo $this->formElementErrors($form->get("Name"), array('class' => "some_class", 'message' => "errormessage")); 

Не знаю, если это самый эффективный способ сделать это, PLZ отказаться от линии, если вы думаете иначе.

FormRow проверяет, зарегистрирован ли плагин «form_element_errors». И если это так, по умолчанию для отображения сообщений об ошибках.

Пример Сэма работает. Вы должны переопределить стандартный плагин и сообщить об этом mvc.

Я сделал это в module.config.php

 'view_helpers' => array( 'invokables' => array( 'formElementErrors'=> 'MyModule\View\Helper\FormElementErrors', 

и FormRow запускают ошибки отображения, как я хочу 🙂

Как ваша проблема, пожалуйста, попробуйте

+ Изменить

 //within the view echo $this->formRow($form->get('Name')); 

в

 //within the view echo $this->formRow($form->get('Name'),null,false); // Note: add more 2 last parameters, false- for $renderErrors => will NOT render Errors Message. //Look original function in helper/formrow.php: function __invoke(ElementInterface $element = null, $labelPosition = null, $renderErrors = null, $partial = null) 

Render Errors Message как ваш funciton

 echo $this->formElementErrors($form->get('name'), array('class' => 'your-class-here')); 

Из документации ZF2. Вот ссылка: http://framework.zend.com/manual/2.0/ru/modules/zend.form.view.helpers.html#formelementerrors

 echo $this->formElementErrors($element, array('class' => 'help-inline')); // <ul class="help-inline"><li>Value is required and can&#039;t be empty</li></ul> 

Я использую echo $this->formElementErrors($form, array('class' => "error-messages")); для отображения всех сообщений об ошибках в одном месте:

 echo $this->formElementErrors($form, array('class' => "error-messages"));// Print all error messagess echo $this->formLabel($form->get('Name')); echo $this->formInput($form->get('Name')); echo $this->formLabel($form->get('Name2')); echo $this->formInput($form->get('Name2'));