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ć.