CActiveForm ajax验证中的歧义


Ambiguity in CActiveForm ajax validation

在CActiveForm的API Doc示例中是:

要响应AJAX验证请求,我们需要以下类代码:

public function actionCreate()
{
    $model=new User;
    $this->performAjaxValidation($model);
    if(isset($_POST['User']))
    {
        $model->attributes=$_POST['User'];
        if($model->save())
            $this->redirect('index');
    }
    $this->render('create',array('model'=>$model));
}
protected function performAjaxValidation($model)
{
    if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }
}

我的问题是:这个代码:$_POST['ajax']==='user-form'是什么意思?我把它改为$_POST['ajax']==='xxxzzz',但脚本工作真正!它是必要的吗?


<标题>编辑

我的代码出错了

if(isset($_POST['ajax']) && $_POST['ajax']==='xxx-zzz')的表达确实有效。仍然执行验证的原因是,在接下来的行中,我以这种方式执行了验证:

$model = new User;
$this->performAjaxValidation($model,'xxx-zzz'); //here don't perform Ajax validation
.
.
.
    if(!$validate){
    $this->performAjaxValidation($model,'user-form'); // here Ajax validation will performed
.
.
.
    }

$_POST['ajax']保存提交给ajax验证的表单的id。你想要什么就拿什么。

CActiveForm::validate()的文档中,它从POST-data加载模型,并且从未使用过$_POST['ajax'],因此如果您想删除它,您可能会删除它。

请确保您没有ajax验证您不打算验证的表单。