Бортовой журнал Ктулху

Сценарии валидации в Yii2

В Yii2 есть такой функционал как сценарии которые позволяют изменять правила валидации в различных ситуациях.

Например, есть некий набор полей, который будет валидироваться в одном случае и не будет в другом. Сценарии объединяют в понятные группы правила валидации и регистрируя условного Уасю, при редактированиии нельзя будет изменить его логин и при сохранении в базу объекта "Уася" поле "Логин" не будет подвергаться валидации.

Имеется модель для создания и редактирования некоторой сущности.

При создании необходимо заполнять определенный набор полей. При редактировании может изменяться, например, только одно поле.

Нужны различные сценарии валидации всех полей и только одного или нескольких.

public function rules()
{
# есть некие обязательные поля для регистрации пользователей и прочих админов
return [
[
  [
    'Name', // Уася
    'Login', // Uasya
    'Role', // User
    'Sex' // регулярно
  ], 'required'] // и это обязательно
  ['Login', 'required','except' => 'edit'],// при сценарии редактирования поле не проверяется
];
}

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

Для этого заводим два сценария: регистрация и редактирование.

public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['create'] = ['Name','Login','Role','Sex'];
$scenarios['edit'] = ['Name','Role','Sex'];
return$scenarios;
}
// при создании нового объекта "Уася" можно указать какой сценарий использовать
$model = new User();
 $model->setScenario('create');