Добавить атрибут класса в ошибки формы
Я разрабатываю приложение с использованием 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;
}
Ответы
Ответ 1
Хорошо, решение моей проблемы было прямо передо мной, вместо того, чтобы использовать:
//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 отбросить линию, если вы думаете иначе.
Ответ 2
Смотрите код формыElementErrors
В принципе, вы можете сделать что-то вроде:
$this->formElementErrors($elem)
->setMessageOpenFormat('<ul%s><li class="some-class">')
->setMessageSeparatorString('</li><li class="some-class">');
Но это довольно неуправляемо...
Лучшим решением было бы расширить Zend\Form\View\Helper\FormElementErrors вашим собственным классом, а затем зарегистрировать вид-помощник formElementErrors для вашего класса. Так что в основном у вас будет что-то вроде этого:
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'
),
);
}
сбой: этот код не проверен, сообщите мне, есть ли какие-то ошибки, но я думаю, что это должно получиться неплохо.
Ответ 3
FormRow проверяет, зарегистрирован ли плагин form_element_errors. И если это так используется по умолчанию для отображения сообщений об ошибках.
Пример работы Сэма. Вы должны переопределить стандартный плагин и сообщить об этом mvc.
Я сделал это в файле module.config.php
'view_helpers' => array(
'invokables' => array(
'formElementErrors'=> 'MyModule\View\Helper\FormElementErrors',
и FormRow начинают отображать ошибки, как я хочу:)
Ответ 4
Как ваша проблема, попробуйте
Изменить
//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'));
Ответ 5
Из документации ZF2. Здесь ссылка: http://framework.zend.com/manual/2.0/en/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't be empty</li></ul>
Ответ 6
Я использую 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'));