Zendframework 2 inputfilter настроить сообщение об ошибке по умолчанию
Я пытаюсь настроить сообщение об ошибке "Value is required and can't be empty
" по умолчанию
в zf2
Я использую следующий код, чтобы добавить настраиваемое сообщение об ошибке по умолчанию в валидаторы inputfilter
$inputFilter->add($factory->createInput(array(
'name' => 'username',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 4,
'max' => 20,
'messages' => array(
'isEmpty' => 'Please enter User Name between 4 to 20 character!'
),
),
),
),
)));
Но я получаю следующую ошибку.
Zend\Validator\Exception\InvalidArgumentException
File:
/home/website/vendor/zendframework/zendframework/library/Zend/Validator/AbstractValidator.php:220
Message:
No message template exists for key 'isEmpty'
Что я делаю неправильно?
ссылка
Ответы
Ответ 1
попробуйте это
$inputFilter->add($factory->createInput(array(
'name' => 'username',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' =>'NotEmpty',
'options' => array(
'messages' => array(
\Zend\Validator\NotEmpty::IS_EMPTY => 'Please enter User Name!'
),
),
),
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 4,
'max' => 20,
'messages' => array(
'stringLengthTooShort' => 'Please enter User Name between 4 to 20 character!',
'stringLengthTooLong' => 'Please enter User Name between 4 to 20 character!'
),
),
),
),
)));
ссылка
Другой набор валидаторов
Ответ 2
Вы также можете установить сообщение об ошибке inputFilter так:
$form = new ParticipantForm();
$mailInput = new Input('mail');
$mailInput->setRequired(true);
$mailInput->setErrorMessage("Empty input");
Ответ 3
Валидатор StringLength не проверяет, должен ли вход быть пустым или нет. Он проверяет длину. Для шаблона StringLength существуют следующие шаблоны сообщений:
const INVALID = 'stringLengthInvalid';
const TOO_SHORT = 'stringLengthTooShort';
const TOO_LONG = 'stringLengthTooLong';
/**
* @var array
*/
protected $messageTemplates = array(
self::INVALID => "Invalid type given. String expected",
self::TOO_SHORT => "The input is less than %min% characters long",
self::TOO_LONG => "The input is more than %max% characters long",
);
См. пример @Developer для прямого подхода. Хотя я предлагаю пойти с именем CamelCased для Validators, поэтому 'name' => 'NotEmpty'
вместо 'name' => 'not_empty'
Вы можете проверить, какие существуют теги messageTemplates, если вы видите код для каждого из классов валидатора. Вы найдете их под ./vendor/zendframework/zendframework/library/Zend/Validator/*