Erstellen der Action
Steht das Model bereit, kann man daran gehen, die Programmlogik zum Verändern des Models umzusetzen. Der dazu benötigte Code wird in einer Controlleraction untergebracht. Für unsere Anmeldeseite kann der Code so aussehen:
Zunächst wird eine Instanz des LoginForms erstellt. Liegen Formulardaten im
POST-Request vor (was heißt, dass das Formular abgeschickt wurde), wird
$model mit den Daten aus $_POST['LoginForm'] befüllt. Ist die folgende
Validierung des Models erfolgreich, wird der Browser auf die Seite umgeleitet,
die der Besucher ohne die dafür nötige Anmeldung aufrufen wollte. Ergab die Prüfung
Fehler oder wird die Action zum ersten mal ausgeführt, wird der View login
gerendert. Darauf werden wir im nächsten Abschnitt näher eingehen.
Tipp: Die
login-Action benutztYii::app()->user->returnUrlum die URL der Seite zu ermitteln, für die der Benutzer zunächst authentifiziert werden musste. Die KomponenteYii::app()->userist vom Typ CWebUser (oder einer Kindklasse) und steht für Informationen der aktuellen Benutzersitzung (z.B. Benutzername, Status). Weitere Einzelheiten dazu finden Sie unter Authentifizierung und Autorisierung.
Sehen wir uns die folgende Anweisung aus obigem Code genauer an:
Wie im Abschnitt Sichere Attributzuweisungen
beschrieben, befüllt diese Codezeile das Model mit den gesendeten
Formulardaten. Die attributes-Eigenschaft ist in CModel definiert. Sie erwartet
ein Array aus Name-Wert-Paaren und weist jedem Modelattribut den entsprechenden Wert zu.
Geht man davon aus, dass in $_POST['LoginForm'] ein Array in eben dieser
Form übergeben wird, könnte man statt dieser einen Zeile auch folgenden, etwas
länglichen Code verwenden (vorausgesetzt, dass jedes erforderliche Attribut im Array
vorhanden ist):
Hinweis: Damit
$_POST['LoginForm']ein Array statt eines String liefert, hält Yii sich an eine Konvention bezüglich Namen für Formularfelder in einem View. Das Eingabefeld, das dem Attributaeiner ModelklasseCentspricht, heißtC[a]. Das Eingabefeld für das das Attributusernameaus obigem Beispiel würde daherLoginForm[username]heißen.
Schließlich muss nun noch der login-View mit einem HTML-Formular erstell
werden.