Yii2: ajax Formular-Validierung, die auf eine ajax-Formulars gesendet

Frage ich mich, ob alle Yii2 Experten kann mir helfen zu verstehen, wie am besten, um die Arbeit mit ajax-Formulare kombiniert mit Yii ajax-Validierung. Ich denke, ich kann erklären, das Problem, ohne Sie durch alle von meinem code.

Arbeite ich an einer Promo-Code-Eingabe-Formular, wo die Benutzer Ihre promo code in das Formular, wird das Formular Absenden via ajax. Wir führen Sie dann eine Datenbank-lookup für den promo-code ein, überprüfen Sie den code, und wenn der code validiert, wollen wir die Anzeige des Formulars, die versteckt auf der Seite.

Habe ich eine benutzerdefinierte validierungsfunktion für das Formular-Feld "code", welches der aktive Bereich in einem Modell-Szenario mit der Bezeichnung "registrieren".

class UserCode extends ActiveRecord
{
    ... 

    public function scenarios()
    {
        return [
            'register' => ['code'],
        ];
    }

    public function rules()
    {
        return [
            [['code'], 'required'],
            [['code'], 'validateUserCode', 'on' => ['register']],
        ];
    }

    public function validateUserCode($attribute, $params)
    {
        //perform all my custom logic to determine if the code is valid

        if ($code_invalid) {
            $this->addError($attribute, 'Sorry, this code is invalid.');
        }
    }

    ...
}

Dann in den controller, wie die Yii2 Guide schon sagt, ich Falle dieses ajax-Validierung mit dem folgenden code:

public function actionValidate() {

    $model = new UserCode(['scenario' => 'register']);

    if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
        Yii::$app->response->format = Response::FORMAT_JSON;
        return ActiveForm::validate($model);
    }

    //no logic can be run after the above code b/c the form is submit with ajax 
    //and therefore always trapped in the Yii::$app->request->isAjax conditional

}

Der obige code alles Prima funktioniert und wenn ich den Fokus aus dem $form->field($model, 'code') Feld auf meinem Formular, Yii 's ajax-Validierung in tritt und zeigt meine benutzerdefinierte Fehlermeldung aus der Basis von" meine benutzerdefinierte Validierungslogik.

Meine Herausforderung entsteht, wenn ich gehen, um das Formular Absenden. Das Formular ist auch erfolgt über ajax, und daher der controller-Aktion gibt immer das Ergebnis der ActiveForm::validate($model); weil if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) erhalten gelten sowohl für die ajax Formular-Validierung UND das Formular Absenden.

Mit dem obigen Ansatz, bin ich gezwungen, wieder nur die Ergebnisse von ajax-Validierung und keine json-Daten, die ich brauchen kann für zusätzliche client-seitige Validierung, wie z.B. die Anzeige des Anmeldeformulars nach einen gültigen code verwenden, übermittelt durch die ajax-Formular.

Merke ich, dass ich einstellen kann 'enableAjaxValidation' => false auf die ActiveForm und dann wieder meine eigene json-Daten innerhalb der if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) Zustand. Wenn ich das mache, bin ich in der Lage zu zeigen das Anmeldeformular, weil ich mein eigenes json-Daten, mit zu arbeiten.

Gibt es eine Möglichkeit, ajax-Validierung auf ein Formular, das vorgelegt wird, mit ajax? Wie konnte Sie fangen die ajax-Validierung separat von der ajax-Formular zu handhaben, die zwei Ereignisse in verschiedenen Manieren?

Irgendwelche Vorschläge oder alternativen Annäherungen sind SEHR geschätzt!

InformationsquelleAutor CICSolutions | 2015-03-10
Schreibe einen Kommentar