Сan't get the validation to work by scenarios

Hello. I’m trying to make validations rules to work in different ways in forms.
Validation rules:

       public function rules()
        {
            return [
                [['owner_id','card_code', 'name', 'phone', 'birthday','language', 'last_ip'], 'required'],
                [['account_id'], 'required', 'on' => 'update'],
                [['account_id'], 'exist', 'skipOnError' => true, 'targetClass' => Accounts::className(), 'targetAttribute' => ['account_id' => 'id'], 'on' => 'update'],

                [['owner_id', 'account_id', 'active', 'last_carwash'], 'integer'],
                [['birthday', 'last_active', 'last_update', 'last_sync'], 'safe'],
                [['car_number', 'role', 'status'], 'string'],
                [['card_code', 'car_number', 'name', 'phone', 'password', 'auth_key', 'language'], 'string', 'max' => 255],
                [['last_ip'], 'ip'],
                [['name'], 'string', 'min' => 5],

                ['password', 'string', 'min' => 6, 'message' => Yii::t('app', 'The password must contain at least 6 symbols.')/*, 'on' => 'create'*/],
                ['password', 'match', 'pattern' => '/[A-z]/', 'message' => Yii::t('app', 'The password must contain at least 1 letter.')/*, 'on' => 'create'*/],
                ['password', 'match', 'pattern' => '/[0-9]/', 'message' => Yii::t('app', 'The password must contain at least 1 number.')/*, 'on' => 'create'*/],
                [['password'], 'required', 'on' => 'create'],
                [['phone'], 'validatePhone', 'except' => 'update'/*, 'skipOnEmpty' => false*/],
                [['email'], 'email'],
                [['email'], 'validateEmail', 'except' => 'update'/*, 'skipOnEmpty' => false*/],
            ];
        }

Scenarios

    public function scenarios()
        {
            $scenarios = parent::scenarios();
            $scenarios['create'] = ['account_id', 'card_code', 'name', 'phone', 'email', 'car_number', 'birthday', 'role', 'password'];
            $scenarios['update'] = ['account_id', 'card_code', 'name', 'phone', 'email', 'car_number', 'birthday', 'role', 'password'];
            return $scenarios;
        }

Validation functions

    public function validatePhone()
        {
            $phone = preg_filter( '/[^0-9]*/','', $this->phone );
            $u = Users::findOne(['phone' => $phone]);
            if($u)
                /*if($this->id != $u->id)*/
                    $this->addError('phone', Yii::t('app', 'This phone is already taken.'));
        }
        public function validateEmail()
        {
            $email = $this->email;
            if (!filter_var($email, FILTER_VALIDATE_EMAIL))
                $this->addError('email', Yii::t('app', 'Please, enter correct email'));
        
            $u = Users::findOne(['email' => $email]);
            if($u)
                $this->addError('email', Yii::t('app', 'This email is already taken.'));
        }

AJAX validation in form

    $form = ActiveForm::begin([
            'enableAjaxValidation' => true,
            'validationUrl' => \yii\helpers\Url::to('/user/validation'),
        ]);

Controller:

    public function actionValidation()
    {
        if (Yii::$app->request->isAjax) {
            Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

            $model = new \app\models\Users();
            if($model->load(Yii::$app->request->post()))
                return \yii\widgets\ActiveForm::validate($model);
        }
        throw new \yii\web\BadRequestHttpException( Yii::t('app', 'Bad request.') );
    }
    public function actionCreate()
    {
        if ( Yii::$app->request->post() != NULL ) {
            $data = Yii::$app->request->post('Users');
            $model = new Users;
            $model->scenario = 'create';
    // lots of code
    if(!$model->validate()){var_dump($model->errors);exit;}
            $model->save();

            return $this->redirect(['view', 'id' => $model->id]);
    }
    public function actionUpdate($id)
    {
        $model = $this->findModel($id);
        $model->scenario = 'update';
        $model->setScenario('update');// same as ^ , but who knows...
    // lots of code
    if(!$model->validate()){var_dump($model->errors);exit;}
            $model->save();
            return $this->redirect(['view', 'id' => $model->id]);
    }
    protected function findModel($id)
        {
            if (($model = Users::findOne($id)) !== null) {
                return $model;
            }
            throw new NotFoundHttpException(Yii::t('app', 'The requested page does not exist.'));
        }

But this validations rule works anyway, ignoring “on” or “except”.
What is the problem?

What’s the code of findModel() and where you call validate()?

Added more code to topic.

I don’t see any obvious issues. Just a wild guess… try introducing constants for scenarios i.e.

class MyModel extends ActiveRecord
{
   const SCENARIO_UPDATE = 'update';
}

and use these in rules. There’s a possibility of having a typo.