【发布时间】:2017-05-29 17:51:10
【问题描述】:
我在今天发现的 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?
【问题讨论】:
-
我也有同样的问题
-
我刚刚更改了表单 ID,它对我有用
标签: php ajax validation yii yii2