Содержание


Сообщения валидаторов


Validation Messages, Валидация, ЗФ2, Zend Framework 2, ZF2, ру, ru




Каждый валидатор, основанный на Zend\Validator\ValidatorInterface, предоставляет одно или несколько сообщений в случае неудачной валидации. Вы можете использовать эту информацию, чтобы установить свои собственные сообщения, или преобразовать существующие сообщения, которые может вернуть валидатор во что-то другое.

 

Эти сообщения валидации являются константами, которые можно найти в верхней части исходного кода каждого класса валидатора. Рассмотримвкачествепримера Zend\Validator\GreaterThan:

protected $messageTemplates = array(
    self::NOT_GREATER => "'%value%' is not greater than '%min%'",
);
 

Как вы можете видеть, константа self::NOT_GREATER относится к неудачной валидации, используется в качестве ключа массива, а само сообщение используется, как значение массива сообщений.

 

Вы можете получить все шаблоны сообщений для валидатора с помощью метода getMessageTemplates(). Он возвращает вышеописанный массив, который содержит все сообщения валидатора, которые могут быть возвращены в случае неудачной проверки.

$validator = new Zend\Validator\GreaterThan();
$messages  = $validator->getMessageTemplates();
 

Используя метод setMessage() можно установить еще одно сообщение, которое может быть возвращено в случае определенной ошибки.

$validator = new Zend\Validator\GreaterThan();
$validator->setMessage(
    'Please enter a lower value',
    Zend\Validator\GreaterThan::NOT_GREATER
);
 

Второй параметр указывает тип ошибки, которая будет переопределена. Если этот параметр не задан, то данное сообщение будет установлено для всех возможных ошибок этого валидатора.

 


Использование предварительно переведенных сообщений валидаторов

 

Zend Framework предоставляет более 45 различных валидаторов, которые содержат более 200 сообщений об ошибках. Перевод всех этих сообщений может стать довольно трудоемкой задачей. Но для вашего удобства Zend Framework поставляется с уже переведенными сообщениями валидации. Вы можете найти их в path /resources/languages в вашей инсталяции Zend Framework.

 

Примечание

 

Используемый путь

Файлы ресурсов находятся вне пути к библиотеке, поскольку все ваши переводы должны также быть вне этого пути.

 

Таким образом, чтобы перевести все сообщения валидации, например, на немецкий, все, что вам нужно сделать - это подключить транслятор к Zend\Validator\AbstractValidator, использующий эти файлы ресурсов.

$translator = new Zend\I18n\Translator\Translator();
$translator->addTranslationFile(
    'phpArray'
    'resources/languages/en.php',
    'default',
    'en_US'
);
Zend\Validator\AbstractValidator::setDefaultTranslator($translator);
 

Примечание

 

Поддерживаемые языки

Это сравнительно новая функциональность, поэтому объем поддерживаемых языков может быть не полным. Новые языки будут добавляться с каждым релизом. Кроме того, не стесняйтесь использовать существующие файлы ресурсов, чтобы создать свой собственный перевод.

 

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

 

Ограничение на размер сообщений валидации



 

Иногда необходимо ограничить максимальный размер, который может иметь сообщение валидации. Например, если ваш вид допускает максимальный размер в 100 символов для вывода в одной строке. Для простоты использования Zend\Validator\AbstractValidator позволяет автоматически ограничивать максимальный размер возвращаемого сообщения валидации.

 

Чтобы получить актуальный установленный размер, используйте Zend\Validator\AbstractValidator::getMessageLength(). Если он равен -1, возвращаемое сообщение не будет усечено. Это поведение по умолчанию.

 

Чтобы ограничить размер возвращаемого сообщения, используйте Zend\Validator\AbstractValidator::setMessageLength(). Установите его в любую целую размерность, какая вам требуется. Если возвращаемое сообщение превышает установленный размер, сообщение будет обрезано, и к оставшейся части сообщения будет добавлена строка ‘...‘.

 

Zend\Validator\AbstractValidator::setMessageLength(100);

 

Примечание

 

Где используется этот параметр?

Установленная длина сообщений используется всеми валидаторами, даже определенными самостоятельно, пока они наследуют Zend\Validator\AbstractValidator