【问题标题】:Yii2 ajax validation not workYii2 ajax验证不起作用
【发布时间】:2015-06-14 16:05:31
【问题描述】:

我试图验证我的 YII2 注册表,但它不起作用。观点:

$form = ActiveForm::begin([
    'id'                   => 'register',
    'options'              => ['accept-charset'=>'utf-8'],
    'validateOnChange'     => false,
    'enableAjaxValidation' => true,
    'validateOnSubmit'     => true,
])

在控制器中:

$model = new MUser();

if($model->load(Yii::$app->request->post()) && Yii::$app->request->isAjax)
{
    $model->refresh();
    Yii::$app->response->format = 'json';
    return ActiveForm::validate($model);
}
elseif($model->load(Yii::$app->request->post()) && $model->save())
{
    \\do something
}

在模型中:

public function rules()
{
    return [
               [
                   'username', 
                   'unique', 
                   'targetClass' => 'com\modules\admin\models\MUser',
                   'message'     => 'Username exist',
               ]
           ];
}

谁能告诉我我做错了什么?

【问题讨论】:

  • 显示com\modules\admin\models\MUser模型
  • 您是否准备好相应的控制器以在 AJAX 请求的情况下返回正确的响应?显示控制器代码。
  • 尝试'enableClientValidation'=> false
  • Muser 模型:public function rules() { return [ ['username', 'unique', 'targetClass'=>'com\modules\admin\models\MUser', 'message'=> '用户名存在')] ]; }
  • 我认为它不起作用,因为 if($model->load(Yii::$app->request->post()) && Yii::$app->request->isAjax) { $模型->刷新(); Yii::$app->response->format = 'json';返回 ActiveForm::validate($model);当我删除此代码时,它注册用户表单工作正常但没有检查用户名唯一,对不起我的英语不好

标签: php ajax forms validation yii2


【解决方案1】:

改变

return ActiveForm::validate($model)

 echo json_encode(ActiveForm::validate($model));
        \Yii::$app->end();

ActiveForm::validate($model) 是一个数组,它需要以 json 形式表示,由 json_encode 和 \Yii::$app->end() 完成;确保应用程序在检查时停止。还要确保您在命名空间之后:

use yii\web\Response;
use yii\widgets\ActiveForm;

但是这样做通过 ajax 提交表单将无法正常工作,完美的方法是使用validationUrl。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多