
В Yii2 данные в полях формы проверяются на валидность с помощью метода yii\base\Model::validate().
Перед такой проверкой на валидность методом validate(), мы должны в модели каждому атрибуту назначить правила валидации. Каждое правило представляет собой массив. У поля должно быть хотя бы 1 правило валидации
Рассмотрим пример проверки на валидность формы:
// объявляем экземпляр класса $model = new \app\models\ContactForm; // модель заполненная пользовательскими данными $model->attributes = \Yii::$app->request->post('ContactForm'); if ($model->validate()) { // все данные корректны } else { // данные не корректны: $errors - массив содержащий сообщения об ошибках $errors = $model->errors; }
Пример взят из официальной документации, он осуществляет проверку массива, полученного POST запросом из формы.
Для того чтобы метод validate() работал, в модели мы должны объявить правила валидации для каждого атрибута формы. Рассмотрим несколько примеров правил
Валидация по типу данных
public function rules(){ return [ // переменная может быть только целочисленным числом [ ['count'],'integer'], // число с плавающей точкой [ ['temperature'],'double'], // логическая переменная (true или false) [ ['check'],'boolean'], // число [ ['age'],'number'], // строка [ ['name'],'string'], // дата (формат 12.12.15) [ ['today'],'date', 'format'=>'dd-mm-yy'], ]; }
Поле обязательно к заполнению
public function rules(){ return [ //поля имя, эл. адрес, телефон, адрес обязательны к заполнению [ ['name', 'email', 'phone','address'], 'required'], ]; }
Email, ссылка и капча
public function rules(){ return [ ['homemail','email'], ['website', 'url', 'defaultScheme' => 'http'], ['verificationCode', 'captcha'], ]; }
Максимальное, минимальное значение и длина строки
public function rules(){ return [ // минимальная длинна строки 100 символов [ ['minstring'],'string','min'=>100], // максимальная длинна строки 1000 символов [ ['maxstring'],'string','max'=>1000], // длинна варьируется от 5 до 10 символов [ ['string'],'string','min'=>5,'max'=>10], // второй способ [ ['lengthstring]', 'string', 'length' => [5, 10]], // аналогично с числами [ ['minnumber'],'number','min'=>100], [ ['maxnumber'],'number','max'=>1000], [ ['betweennumber'],'number','min'=>5,'max'=>10], ]; }
Проверка типа файла
public function rules(){ return [ //обязательно изображение [ ['picture'],'image'], // документ только doc или docx [ ['document'],'file','types'=>['doc','doсx']], // документ определенного формата размером не больше 1 Кб ['blank', 'file', 'extensions' => ['pdf', 'doc', 'djvu'], 'maxSize' => 1024*1024], // изображение определенного формата и определенных размеров ['myimage', 'image', 'extensions' => 'png, jpg, gif', 'minWidth' => 1000, 'maxWidth' => 2000, 'minHeight' => 1000, 'maxHeight' =>2000, ], ]; }
Валидация по уникальности
public function rules(){ return [ // name должен быть уникальным в столбце ['name', 'unique'], // mail должен быть уникальным, но для проверки на уникальность // будет использован столбец secondmail ['mail', 'unique', 'targetAttribute' => 'secondmail'], // name и email вместе должны быть уникальны, и каждый из них // будет получать сообщения об ошибке [ ['name', 'email'], 'unique', 'targetAttribute' => ['name', 'email']], // name и email вместе должны быть уникальны, но только name будет получать сообщение об ошибке ['name', 'unique', 'targetAttribute' => ['name', 'email']], // name должен быть уникальным, что устанавливается проверкой уникальности email и secondmail используя name ['name', 'unique', 'targetAttribute' => ['email', 'name' => 'secondemail']], ]; }
Валидация существования
public function rules(){ return [ // name должно существовать в столбце, который представляется атрибутом "name" ['name', 'exist'], // name должно существовать, но его значение будет использовать email для проверки существования ['name', 'exist', 'targetAttribute' => 'email'], // и name, и email должны существовать, в противном случае оба атрибута будут возвращать ошибку , // и name, и email должны существовать, но только атрибут name будет возвращать ошибку ['name', 'exist', 'targetAttribute' => ['name', 'email']], // name требует проверки существования email и a3 (используя значение name) ['name', 'exist', 'targetAttribute' => ['email', 'name' => 'a3']], // name должен существовать. Если name - массив, то каждый его элемент должен существовать ['name', 'exist', 'allowArray' => true], ]; }
Валидатор фильтр, валидатор не проверяет данные он выполняет определенные действия над атрибутами
public function rules(){ return [ //обрезаем пробелы строки с обоих сторон [ ['name'],'filter','filter'=>'trim'], // преобразуем регистр [ ['address'],'filter','filter'=>'strtolower'], ['phone', 'filter', 'filter' => function ($value) { // выполняем определенные действия с переменной, возвращаем преобразованную переменную return newValue; }], ]; }
Валидатор список
public function rules(){ return [ // номер от 5 до 20 ['number', 'in','range'=>range(5,20)], // язык либо английский, либо французский, либо русский, без учета типа данных, если true проверять тип данных ['language','in','range'=>['en','fr','ru']], ,'strict'=>false], ]; }
Валидатор сравнения, сравнивает одно значение с другим
public function rules(){ return [ // проверяет, является ли значение атрибута "password" таким же, как "password_repeat" ['password', 'compare'], // проверяет, что возраст больше или равен 30 ['age', 'compare', 'compareValue' => 30, 'operator' => '>='], ]; }
Валидатор по регулярному выражению
public function rules(){ return [ // проверяет, что "name" начинается с буквы и содержит только буквенные символы, // числовые символы и знак подчеркивания ['name', 'match', 'pattern' => '/^[a-z]\w*$/i'] ]; }
Валидатор присваивающий значение по умолчанию
public function rules(){ return [ // установить null для "age" в качестве значения по умолчанию ['age', 'default', 'value' => null], // установить "USA" в качестве значения по умолчанию для "country" ['country', 'default', 'value' => 'USA'], // установить в "from" и "to" дату 3 дня и 6 дней от сегодняшней, если они пустые [ ['from', 'to'], 'default', 'value' => function ($model, $attribute) { return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' : '+6 days')); }], ]; }
Валидатор, указывающий безопасность атрибута
public function rules(){ return [ // обозначает "name" как safe атрибут ['name', 'safe'], ]; }
25 января 2017, Программирование, веб-кодинг / Метки: валидация rules
По мотивам – http://www.webapplex.ru/pravila-validaczii-form-v-yii-2.x

