/ / Niejednoznaczność w sprawdzaniu poprawności ajaxa CActiveForm - php, yii

Niejednoznaczność sprawdzania ajaxa CActiveForm - php, yii

w Dokumentacja API Przykład dla CActiveForm to:

Aby odpowiedzieć na żądania sprawdzania poprawności AJAX, potrzebujemy następującego kodu klasy:

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();
}
}

Moje pytanie: co mówi ten kod: $_POST["ajax"]==="user-form"? Zmieniłem go na $_POST["ajax"]==="xxxzzz" ale skrypt działał naprawdę! Jest niezbędne?


Mój kod był błędny.

The if(isset($_POST["ajax"]) && $_POST["ajax"]==="xxx-zzz") ekspresja naprawdę działa. Powodem wciąż sprawdzania poprawności było, w następnych liniach przeprowadziłem walidację w ten sposób:

$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
.
.
.
}

Odpowiedzi:

1 dla odpowiedzi № 1

$ _POST ["ajax"] zawiera identyfikator formularza przesłanego do sprawdzenia ajax. Zrób z tego, co chcesz.

Jak w dokumentacji dla CActiveForm::validate() ładuje model z danych POST, a $ _POST ["ajax"] nigdy nie jest używany, więc prawdopodobnie możesz go usunąć, jeśli chcesz.

Dobrze jest upewnić się, że nie przetestujesz formularza, którego nie chcesz zatwierdzić.