Sobald wir ein Model haben, können wir anfangen, die Logik für das Arbeiten mit dem Model zu verfassen. Wir platzieren diese Logik in eine Controller-Action. Für das Beispiel des Anmeldeformulars ist der folgende Code notwendig:
public function actionLogin()
{
$form=new LoginForm;
if(isset($_POST['LoginForm']))
{
// Erfasst die vom Benutzer eingegeben Daten
$form->attributes=$_POST['LoginForm'];
// Prüfe die Benuzereingaben auf Gültigkeit und kehre zur
// vorherigen Seite zurück, wenn die Prüfung erfolgreich war.
if($form->validate())
$this->redirect(Yii::app()->user->returnUrl);
}
// Zeige das Anmeldeformular
$this->render('login',array('user'=>$form));
}
Oben erzeugen wir zuerst eine Instanz von LoginForm
. Wenn die Anfrage ein
POST-Request ist (d.h. das Anmeldeformular abgeschickt wurde), befüllen wir $form
mit den übermittelten Daten von $_POST['LoginForm']
. Dann prüfen wir die
Eingaben auf Gültigkeit. Falls dies erfolgreich war, leiten wir den Browser des
Benutzers auf die Seite um, die vorher eine Authentifizierung erfordert hat.
Falls die Gültigkeitsprüfung scheitert
oder die Action zum ersten mal aufgerufen wurde, rendern wir den login
-View.
Dessen Inhalt wird im nächsten Kapitel beschrieben.
Tipp: Die
login
-Action benutztYii::app()->user->returnUrl
um die URL der Seite zu ermitteln, die eine Authentifizierung erfordert hat. Die KomponenteYii::app()->user
ist vom Typ CWebUser (oder dessen Kind-Klasse) und repräsentiert die Informationen der Benutzersitzung (z.B. Benutzername, Status). Weitere Einzelheiten finden Sie unter Authentifizierung und Berechtigung.
Beachten wir insbesondere die folgende PHP-Anweisung in der login
-Action:
$form->attributes=$_POST['LoginForm'];
Wie wir im Abschnitt Absichern von Attributzuweisungen
beschrieben haben, befüllt diese Codezeile das Model mit den vom Benutzer übermittelten Daten.
Die attributes
-Eigenschaft ist in CModel definiert, erwartet ein Array von Namen-Werte-Paaren
und weist jedem Model-Attribut den entsprechenden Wert zu. Wenn uns also $_POST['LoginForm']
solch ein Array übergibt, wäre der obige Code äquivalent zu folgendem, etwas
länglichem Code (vorausgesetzt, dass jedes erforderliche Attribut im Array
vorhanden ist):
$form->username=$_POST['LoginForm']['username'];
$form->password=$_POST['LoginForm']['password'];
$form->rememberMe=$_POST['LoginForm']['rememberMe'];
Hinweis: Damit
$_POST['LoginForm']
uns ein Array statt eines String liefert, halten wir uns an eine Konvention bezüglich der Bezeichnung der Eingabefelder in einem View. Dazu benennen wird das Eingabefeld, das dem Attributa
des Model der KlasseC
entspricht,C[a]
. Für das Attributusername
würden wir zum BeispielLoginForm[username]
als Namen für das Eingabefeld verwenden.
Nun verbleibt noch, den login
-View zu entwerfen, der ein HTML-Formular
mit den notwendigen Eingabefeldern enthält.
Signup or Login in order to comment.