Yii2. Валидация формы. Часть 1
После заполнения полей формы на сайте, необходимо проверить правильность введенных данных. Правила валидации полей формы описываются в методе rules()
модели формы. Данный метод должен возвращать массив, в котором к свойствам модели (полям формы) применены те или иные валидаторы.
<?php namespace app\models; use yii\base\Model; class FeedbackForm extends Model { public $name, $email, $body; public function attributeLabels() { return [ 'name' => 'Ваше имя', 'email' => 'Ваш email', 'body' => 'Ваше сообщение', ]; } public function rules() { return [ ['name', 'required'], // поле name обязательно для заполнения ['email', 'required'] // поле email обязательно для заполнения ]; } }
/* ... */ class FeedbackForm extends Model { /* ... */ public function rules() { return [ // поля name и email обязательны для заполнения [['name', 'email'], 'required'] ]; } }
Yii2 добавит на страницу с формой js-код для проверки полей формы:
<script> jQuery(function ($) { jQuery('#feedback-form').yiiActiveForm( [ { "id":"feedbackform-name", "name":"name", "container":".field-feedbackform-name", "input":"#feedbackform-name", "validate":function (attribute, value, messages, deferred, $form) { yii.validation.required( value, messages, {"message":"Необходимо заполнить «Ваше имя»."} ); } }, { "id":"feedbackform-email", "name":"email", "container":".field-feedbackform-email", "input":"#feedbackform-email", "validate":function (attribute, value, messages, deferred, $form) { yii.validation.required( value, messages, {"message":"Необходимо заполнить «Ваш email»."} ); } } ], [] ); }); </script>
Чтобы сообщения об ошибках были на русском языке, необходимо добавить в файл конфигурации:
<?php /* * Файл config/web.php */ $config = [ /* ... */ 'language' => 'ru-RU', /* ... */ ];
Если сообщения об ошибках по умолчанию не устраивают, можно задать свой текст сообщения:
/* ... */ class FeedbackForm extends Model { /* ... */ public function rules() { return [ // поля name и email обязательны для заполнения [['name', 'email'], 'required', 'message' => 'Это поле обязательно для заполнения'] ]; } }
Добавим еще одно правило для проверки корректности адреса электронной почты:
/* ... */ class FeedbackForm extends Model { /* ... */ public function rules() { return [ // поля name и email обязательны для заполнения [['name', 'email'], 'required', 'message' => 'Это поле обязательно для заполнения'], // поле email должно быть корректным адресом почты ['email', 'email'], ]; } }
Добавим проверку длины поля name
:
/* ... */ class FeedbackForm extends Model { /* ... */ public function rules() { return [ // поля name и email обязательны для заполнения [['name', 'email'], 'required'], // поле email должно быть корректным адресом почты ['email', 'email'], // поле name должно быть длиной не менее 2 символов ['name', 'string', 'min' => 2], // поле name должно быть длиной не более 10 символов ['name', 'string', 'max' => 10], ]; } }
/* ... */ class FeedbackForm extends Model { /* ... */ public function rules() { return [ // поля name и email обязательны для заполнения [['name', 'email'], 'required'], // поле email должно быть корректным адресом почты ['email', 'email'], // поле name должно быть длиной не менее 2 символов ['name', 'string', 'min' => 2, 'tooShort' => 'Поле должно быть длиной не менее 2 символов'], // поле name должно быть длиной не более 10 символов ['name', 'string', 'max' => 10, 'tooLong' => 'Поле должно быть длиной не более 10 символов'], ]; } }
Еще один вариант указать минимальную и максимальную длину поля:
/* ... */ class FeedbackForm extends Model { /* ... */ public function rules() { return [ // поля name и email обязательны для заполнения [['name', 'email'], 'required'], // поле email должно быть корректным адресом почты ['email', 'email'], // поле name должно быть длиной от 2 до 10 символов ['name', 'string', 'length' => [2, 10]] ]; } }
Удалить лишние пробелы и установить значение по умолчанию для поля city
:
/* ... */ class FeedbackForm extends Model { /* ... */ public function rules() { return [ // удалить пробелы для полей name, email и city [['name', 'email', 'city'], 'trim'], // поля name и email обязательны для заполнения [['name', 'email'], 'required', 'message' => 'Это поле обязательно для заполнения'], // поле email должно быть корректным адресом почты ['email', 'email'], // если поле city пустое, устанавливаем значение Москва ['city', 'default', 'value' => 'Москва'], ]; } }
Можно добавить свой валидатор, но он будет работать только на сервере:
/* ... */ class FeedbackForm extends Model { /* ... */ public function rules() { return [ // удалить пробелы для полей name, email и city [['name', 'email', 'city'], 'trim'], // поля name и email обязательны для заполнения [['name', 'email'], 'required', 'message' => 'Это поле обязательно для заполнения'], // поле email должно быть корректным адресом почты ['email', 'email'], // если поле city пустое, устанавливаем значение Москва ['city', 'default', 'value' => 'Москва'], // проверка названия города, будет работать только на сервере [ 'city', function ($attribute, $params) { if (!in_array($this->$attribute, ['Москва', 'Минск', 'Астана'])) { $this->addError($attribute, 'Город должен быть Москва, Минск или Астана'); } }, 'skipOnEmpty' => false ], ]; } }
/* ... */ class FeedbackForm extends Model { /* ... */ public function rules() { return [ // удалить пробелы для полей name, email и city [['name', 'email', 'city'], 'trim'], // поля name и email обязательны для заполнения [['name', 'email'], 'required', 'message' => 'Это поле обязательно для заполнения'], // поле email должно быть корректным адресом почты ['email', 'email'], // если поле city пустое, устанавливаем значение Москва ['city', 'default', 'value' => 'Москва'], // проверка названия города, будет работать только на сервере ['city', 'validateCity', 'skipOnEmpty' => false], ]; } public function validateCity($attribute, $params) { if (!in_array($this->$attribute, ['Москва', 'Минск', 'Астана'])) { $this->addError($attribute, 'Город должен быть Москва, Минск или Астана'); } } }
Дополнительно
- Проверка входящих данных
- Встроенные валидаторы
- Правила валидации свойств модели
- Правила валидации форм
Поиск: PHP • Web-разработка • Форма • Фреймворк • Form • Validate • Валидация • Rule • Yii2