Как не сохранять в модель поле отмеченое как required и unique при редактировании?

есть модель User

вот правило

public function rules()
        {
            return [
                ['username', 'required'],
                //['username', 'match', 'pattern' => '#^(p{L}|p{Zs}|p{N}|,|-|_ | |)+$#i'],
                ['username', 'unique', 'targetClass' => self::className(), 'message' => 'This username has already been taken.'],
                ['username', 'string', 'min' => 2, 'max' => 255],
    
                ['email', 'required'],
                ['email', 'email'],
                ['email', 'unique', 'targetClass' => self::className(), 'message' => 'This email address has already been taken.'],
                ['email', 'string', 'max' => 255],
    
                ['status', 'integer'],
                ['status', 'default', 'value' => self::STATUS_ACTIVE],
                ['status', 'in', 'range' => array_keys(self::getStatusesArray())],
            ];
        }


есть необходимость разрешить пользователю изменения только ника вопрос, а как в данном случае отключить проверку email потому, что модель не валидируется из за то, что или емаил не уникальный или его надо заполнить?
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
используйте сценарии. Более подробно про них можно почитать здесь
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
kimono
@kimono
Web developer
class UserModel extends ActiveRecord {
  const SCENARIO_UPDATE = 'update';

  public function scenarios(){
    return [
      self::SCENARIO_DEFAULT => ['username', 'email', 'password'],
      self::SCENARIO_UPDATE => ['username', 'password'],
    ];
  }
}

class UserController extends Controller {
  public function actionUpdate(){
    $model = new UserModel();
    $model->scenario = UserModel::SCENARIO_UPDATE;
    // ...
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы