В API Doc Приклад для CActiveForm:
Щоб відповісти на запити перевірки 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"
але сценарій спрацював! Це необхідно?
Мій код був неправильний.
The 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
.
.
.
}
Відповіді:
1 для відповіді № 1$ _POST ["ajax"] містить ідентифікатор форми, поданої для перевірки ajax. Візьміть з того, що ви хочете.
Як ви в документації для CActiveForm::validate()
вона завантажує модель з POST-даних, і $ _POST ["ajax"] ніколи не використовується, тому ви, ймовірно, можете видалити її, якщо хочете.
Це добре, щоб переконатися, що ви не "t ajax перевірити форму, яку ви не маєте намір перевірити, хоча.