私はyii2 ajaxのバリデーションを発見しました。Yii2 Ajaxの検証では、1つのフィールドが一意でないことを確認していません。
基本的に私は入力が一意であり、そのテーブルのそのフィールドのどこにも見つからないことを確認するために、フォームの1フィールドでajax検証を実行しようとしていました。
あなたは私に言わせれば、次のコードは正常に動作するはずです:
コントローラーでpublic function scenarios(){
return ['update' => ['username']];
}
public function rules(){
return [['username'], 'unique'];
}
:
public function actionUpdate(){
$user = User::findmodel.. bla bla
some more bla bla..
if(Yii::$app->request->isAjax){
$user->setScenario('update');
$user_post_ajax = Yii::$app->request->post('User');
$user->username = $user_post_ajax['username'];
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return ActiveForm::validate($user);
}
some more bla bla bla..
}
ビューで:
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($user, 'username', ['enableAjaxValidation' => true])->textInput() ?>
<?= Html::submitButton('Save', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
<?php ActiveForm::end(); ?>
これをモデルに
すべきだが、それはそうでない場合は、検証エラーを表示しません。この場合は'Username is already taken'
のように、有効でも無効でも表示されません。それはajaxリクエストを実行し、私はdevのツールでjsonの応答を見ることができますが、まったく表示されません。しかし、$user->setScenario('update');
をif条件の外に移動させると、if(Yii::$app->request->isAjax)
よりも上にあると、完全に正常に動作します。私はこれを理解していない、何かが不足している?なぜajaxリクエストが動作を変更するときにsetScenarioを使用するのですか?
私は少し同じ問題 –
を持っている私は、フォームのIDを変更して、それはあなたの答え私 –