簡體   English   中英

Yii2 Ajax驗證未驗證唯一字段

[英]Yii2 Ajax Validation not validating one field unique

我今天發現的yii2 ajax驗證發現了非常奇怪的行為。

基本上,我試圖在表單的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請求,我可以在開發工具中看到json響應,但根本不顯示。 但是,當您移動$user->setScenario('update'); 在if條件之外,僅在if(Yii::$app->request->isAjax)之上的情況下,它才能很好地工作。 我不明白,我想念什么嗎? 為什么在ajax請求更改行為時使用setScenario?

您將覆蓋Yii模型中的visions()函數,從而不驗證任何屬性。

檢查: https : //github.com/yiisoft/yii2/blob/master/framework/base/Model.php#L184

您應該做的是:

public function rules(){
  return [['username'], 'unique', 'on'=>['update']];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM