Примеры валидации в Yii

В это материале приведены самые популярные примеры валидации в yii.

Примеры валидации в Yii
Метод rules() принадлежит классу CModel ( CActiveRecord наследует CModel ), таким образом, создав модель, мы имеем два метода:

$model->validate()   - пройдена ли валидация (true | false)
$model->getErrors()  - список ошибок (array())

Схема работы валидации.

Схема работы валидации

Стандартные параметры
array(
    'список полей модели',
    'валидатор',
    'on'=>'имя сценария',
    'except'=>'имя сценария',
    'message'=>'сообщение об ошибке',
    …параметры валидации…
);

Использование валидации в виджете CActiveForm
<?=$form->errorSummary($model); ?>
<div class="row">
    <?=$form->labelEx($model,'username'); ?>
    <?=$form->textField($model,'username'); ?>
    <?=$form->error($model,'username'); ?>
</div>

Использование для CHtml
<?=CHtml::errorSummary($model);?>
<?=CHtml::error($model, 'username');?>

Пример использования в контроллере, принимающее post данные из формфы
public function actionCreate() {
    $model = new User('create'); 
    if (isset($_POST['User'])) {
        $model->attributes = $_POST['User'];
         //var_dump($model->validate());
         //var_dump ($model->getErrors());
        // валидация происходит автоматически, чтобы запретить валидацию, нужно передать false ($model->save(false))
       if ($model->save()){          
            $this->redirect(array('view', 'id' => $model->id));
        }      
    }
    $this->render('create', array(
        'model' => $model,
    ));
}

Пометить данные, учавствующие в фильтрах
// @todo Please remove those attributes that should not be searched.
array('user_id, day, month, year', 'safe', 'on' => 'search'),

Пометить данные как безопасные
safe - это такая штука, которая позволяет понять Yii, что данный атрибут модели, пришедший из атрибутов (cmodel::attributes), является разрешенным к присвоению к атрибутам модели без валидации, например $model->attributes = $_POST['Article']. Используйте валидатор safe, когда вам не важно, какое значение может принять валидируемый атрибут при массовом присвоении.

array('day, month, year, position', 'safe')

Пометить данные как небезопасные
unsafe используйте тогда, когда вам надо с одной стороны валидировать элемент перед записью, а с другой стораны не дать возможность записывать его через attributes.

array('day, month, year, position', 'unsafe')

Использование сценария
Правило валидации

array(
  //'on'=>'имя сценария',
  array('username’, 'required', 'on'=>'create,update'),
);

Использование в контроллере

Так:

public function actionCreate() {
	$model = new User('create');
    //...
}

или

public function actionPassword($id) {
    $model = $this->loadModel($id);
    $model->scenario = 'password';
    //...
}

По умолчанию используются два сцинария: insert и update

Исключение валидации для определенных сценариев
array(
  'id, first_name, email',
  'required',
  'except' => array('register'),
),

Своё сообщение об ошибке
return array(
    array('title, content', 'required',
      'message'=>'Введите значение {attribute}.'),
      //другие сообщения
);

Использование фильтра
array('email', 'filter', 'filter' => 'trim'),
array('username','filter', 'filter'=>'strtoupper'),
array('alias', 'filter', 'filter' => array('text', 'getAliasByStr')),
// где text класс хелпера, a getAliasByStr($str) его метод
Дефолтное значение
array('email', default, value => 'goper@tut.by')
Integer Validation
array('status', 'numerical', 'integerOnly'=>true),

Minand Max Length Validation
// min
array('username', 'length', 
    'min'=>20,
    'tooSmall'=>'You must enter minimum 20 characters',
 
),
// max
array('username', 'length', 
    'max'=>45,
    'tooBig'=>'You cannot enter more than 45 characters',
),

Range Validation
array('status', 'in', 
    'range'=>array(1,2,3),
    'allowEmpty'=>false,
    'strict'=>true,// type comparison
),

Preg_match(pattern) Validation
array('username', 'match', 'pattern' => '/^[A-z][\w]+$/')

Required Validation
array('username,password,confirmpassword','required')

Unique Validation
array('username, email','unique',
    'caseSensitive'=>true,
    'allowEmpty'=>true,    
),

URL Validation
array('siteurl', 'url'),

Примеры работы с датой
// правильный формат
array('startDate, endDate', 'date', 'format' => 'MM/dd/yyyy'),
// сравнение двух дат
array(
  'last_date',
  'compare',
  'compareAttribute'=>'start_date',
  'operator'=>'>', 
  'allowEmpty'=>false , 
  'message'=>'{attribute} must be greater than "{compareValue}".'
),  

Свой валидатор
array('file', 'filetype’),
public function filetype($attr, $params){
	if(!true){
		$this->addError('file', 'fuck off');
	}
}

Валидация загрузки файлов
array('my_image, 'file',
    'allowEmpty'  => true,
    'maxFiles'   => 1,
    'maxSize'   => 1024 * 250,
    'minSize'   => 0,
    'types'   => 'jpg',
    'tooLarge' => 'Вы загружаете файл слишком большого размера',
    'tooSmall' => 'Вы загружаете файл слишком маленького размера',
    'tooMany' => 'Вы загружаете слишком большое количество файлов',
    'wrongType' => 'Неправильный тип файла',
    'wrongMimeType' => 'Неправильный MIME-тип файла',
    'on'   => array('user_registration', 'admin_edit'),
)
Теги:
валидация
Добавлено: 20 Апреля 2018 18:38:15 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...