[英]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.