- Der schnelle Einstieg
- Grundlagen
- Mit Formularen arbeiten
- Arbeiten mit Datenbanken
- Caching
- Yii erweitern
- Tests
- Spezialthemen
Um einen ersten Eindruck von Yii zu bekommen, beschreiben wir in diesem
Kapitel, wie wir eine einfache Yii-Anwendung anlegen. Dazu verwenden wir den
mächtigen yiic-Befehl, ein Hilfsprogramm, das automatisch Code für verschiedene
Zwecke generieren kann. Wir gehen davon aus, dass Yii im Verzeichnis
YiiRoot installiert wurde.
Starten Sie yiic von der Kommandozeile wie folgt:
% YiiRoot/framework/yiic webapp WebRoot/testdrive
Hinweis: Wenn Sie
yiicunter Mac OS, Linux or Unix starten, müssen Sie evtl. die Zugriffsrechte deryiic-Datei auf ausführbar setzen. Alternativ können sie den Befehl auch wie folgt aufrufen:% cd WebRoot/testdrive % php YiiRoot/framework/yiic.php webapp WebRoot/testdrive
Damit wird im Verzeichnis WebRoot/testdrive die Grundstruktur einer
Yii-Anwendung angelegt, wobei WebRoot für das Wurzelverzeichnis
(engl.: DocumentRoot) Ihres Webservers steht. Die Anwendung enthält alle
benötigten Verzeichnisse und Dateien und ist somit ist ein guter
Ausgangspunkt um weitere Features zu ergänzen.
Ohne eine einzige Zeile Code zu schreiben, können wir unsere erste Yii-Anwendung einem Testlauf unterziehen, indem wir folgende URL in einem Webbrowser aufrufen:
http://hostname/testdrive/index.php
Wie wir sehen, besteht die Anwendung aus drei Seiten: Der Startseite, der Kontaktseite und der Anmeldeseite. Die Kontaktseite enthält ein Kontaktformular mit dem Besucher Anfragen an den Webmaster senden können. Über die Anmeldeseite können Benutzer sich einloggen um Zugriff auf geschützte Bereiche der Site zu erhalten. Die folgenden Screenshots zeigen mehr Details:
Startseite

Kontaktseite

Kontaktseite mit Eingabefehlern

Kontaktseite im Erfolgsfall

Anmeldeseite

Das folgende Diagramm zeigt die Verzeichnisstruktur unserer Anwendung. Für eine nähere Erläuterung dieser Struktur lesen Sie bitte die Konventionen.
testdrive/
index.php Eingangsscript der Web-Anwendung
assets/ enthält veröffentlichte Quelldateien
css/ enthält CSS-Dateien
images/ enthält Bilddateien
themes/ enthält Anwendungs-Themes
protected/ enthält geschützte Anwendungsdateien
yiic yiic-Script für die Kommandozeile unter Linux/Unix
yiic.bat yiic-Script für die Kommandozeile unter Windows
yiic.php PHP-Script für yiic
commands/ enthält selbst erstellte 'yiic'-Kommandos
shell/ enthält selbst erstellte 'yiic shell'-Kommandos
components/ enthält wiederverwendbare Benutzerkomponenten
MainMenu.php die 'MainMenu' (Hauptmenü) Widget-Klasse
Identity.php die Klasse 'Identity' (Identität) für die Authentifizierung
views/ enthält View-Dateien für Widgets
mainMenu.php die View-Datei für das 'MainMenu'-Widget
config/ enthält Konfigurationsdateien
console.php die Konfiguration für Konsolenanwendungen
main.php die Konfiguration für Webanwendungen
test.php die Konfiguration für Funktionstests
controllers/ enthält Klassendateien für Controller
SiteController.php die Klasse des Standardcontrollers
data/ enthält Beispieldatenbank für SQLite
extensions/ enthält Erweiterungen von Drittanbietern
messages/ enthält übersetzte Meldungen
models/ enthält Klassendateien für Models
LoginForm.php das Form-Model für die 'login'-Action
ContactForm.php das Form-Model für die 'contact'-Action
runtime/ enthält temporär erzeugte Dateien
tests/ enthält Testscripts
views/ enthält Controller-Views und Layout-Dateien
layouts/ enthält View-Dateien des Layouts
main.php das Standardlayout für alle Views
site/ enthält View-Dateien für den Site-Controller
contact.php der View für die 'contact'-Action
error.php der View für die 'error'-Action (zur Anzeige externer Fehler)
index.php der View für ide 'index'-Action
login.php der View für die 'login'-Action
Die meisten Webapplikationen sind datenbankgestützt. Unsere Testanwendung bildet
hier keine Ausnahme. Um eine Datenbank zu verwenden, müssen wir der Anwendung
mitteilen, wie die Verbindung zur Datenbank aufgebaut wird. Das geschieht in
der Konfigurationsdatei WebRoot/testdrive/protected/config/main.php wie
folgt:
return array( ...... 'components'=>array( ...... 'db'=>array( 'connectionString'=>'sqlite:protected/data/testdrive.db', ), ), ...... );
Obiger Code weist Yii an, dass die Anwendung sich bei Bedarf mit der SQLite-Datenbank
WebRoot/testdrive/protected/data/testdrive.db verbinden soll. Beachten Sie,
dass die SQLite-Datenbank bereits in der Beispielanwendung enthalten ist, die
wir gerade erstellt haben. Die Datenbank enthält nur die Tabelle tbl_user:
CREATE TABLE tbl_user ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username VARCHAR(128) NOT NULL, password VARCHAR(128) NOT NULL, email VARCHAR(128) NOT NULL );
Falls Sie stattdessen eine MySQL-Datenbank einsetzen möchten, können Sie das
Schema in WebRoot/testdrive/protected/data/schema.mysql.sql verwenden, um
die Datenbank anzulegen.
Hinweis: Um Yii’s Datenbankfunktionen benutzen zu können, müssen wir in PHP die PDO-Erweiterung inkl. der treiberspezifischen PDO-Erweiterung einschalten. Für die Testanwendung müssen also
php_pdoundphp_pdo_sqliteaktiviert sein.
Der Einfachheit halber erzeugen wir in unserer Datenbank
nur eine einzelne Tabelle User. Die SQLite-Datenbankdatei wird als
WebRoot/testdrive/protected/data/source.db gespeichert. Beachten Sie, dass
der Webserver bei SQLite sowohl auf die Datenbankdatei, als auch das übergeordnete
Verzeichnis schreiben können muss.
Jetzt kommen wir zum vergnüglichen Teil. Wir möchten CRUD-Operationen (
für "Create, Read, Update, Delete", "Erstellen, Lesen, Aktualisieren, Löschen")
für die eben erstellte Tabelle User bereitstellen. Eine typische
Aufgabenstellung praktischer Anwendungen.
Wieder verwenden wir den yiic-Befehl, um uns beim Generieren des benötigten
Codes behilflich zu sein. Dieser Prozess wird übrigens auch als scaffolding
(sinngem.: ein Gerüst erstellen) bezeichnet.
Öffnen Sie ein Befehlsfenster und geben Sie die folgenden Befehle ein:
% cd WebRoot/testdrive
% YiiRoot/framework/yiic shell
Yii Interactive Tool v1.1
Please type 'help' for help. Type 'exit' to quit.
>> model User tbl_user
generate models/User.php
generate fixtures/tbl_user.php
generate unit/UserTest.php
The following model classes are successfully generated:
User
If you have a 'db' database connection, you can test these models now with:
$model=User::model()->find();
print_r($model);
>> crud User
generate UserController.php
generate UserTest.php
mkdir D:/testdrive/protected/views/user
generate create.php
generate update.php
generate index.php
generate view.php
generate admin.php
generate _form.php
generate _view.php
Crud 'user' has been successfully created. You may access it via:
http://hostname/path/to/index.php?r=user
Hier verwenden wir das shell-Kommando von yiic, um mit unserer frischen
Yii-Anwendung zu arbeiten. An der Eingabeaufforderung geben wir die beiden
Sub-Befehle model User tbl_user und crud User ein. Ersterer
erzeugt automatisch die Model-Klasse User für die Tabelle tbl_user,
letzterer analysiert das User-Model und generiert den Code, der für die
entsprechenden CRUD-Operationen benötigt wird.
Hinweis: Falls Ihnen Fehler wie "...could not find driver" ("...konnte Treiber nicht finden") begegnen, obwohl beim Testen der Anforderungen angezeigt wurde, dass PDO und der zugehörige Datenbanktreiber bereits aktiviert sind, können Sie versuchen,
yiicwie folgt aufzurufen:% php -c pfad/zu/php.ini protected/yiic.php shellwobei
pfad/zu/php.iniauf die richtige INI-Datei verweist.
Sehen wir uns das Ergebnis unserer Arbeit an, indem wir die folgende URL aufrufen:
http://hostname/testdrive/index.php?r=user
Wir sehen eine Liste aller Einträge in der Tabelle tbl_user.
Klicken Sie auf den Link Benutzer anlegen. Falls wir uns noch
nicht angemeldet haben, werden wir auf die Anmeldeseite geleitet. Nach der
Anmeldung erscheint ein Eingabeformular, mit dem wir einen neuen
Benutzereintrag hinzufügen können. Füllen Sie das Formular aus, und klicken Sie
unten auf den Button Erstellen. Falls die Eingabe fehlerhaft war, erscheint
ein netter Hinweis auf den Fehler. Dies verhindert, dass wir den Eintrag speichern
können. Nach dem Speichern sollte der neu angelegte Benutzer in der
Benutzerliste erscheinen.
Wiederholen Sie die obigen Schritte, und fügen Sie weitere Benutzer hinzu. Beachten Sie, dass auf der Seite der Benutzerliste automatisch eine Seitenblätterung (engl.: pagination) erscheint, sobald zu viele Einträge für eine Seite vorhanden sind.
Wenn wir uns mit admin/admin als Administrator anmelden, können wir
unter der folgenden URL die Administrationsseite für Benutzer aufrufen:
http://hostname/testdrive/index.php?r=user/admin
Wir erhalten eine schöne tabellarische Liste der eingetragenen Benutzer. Wir können auf die Spaltentitel klicken, um nach der entsprechenden Spalten zu sortieren. Und wie auf der Seite mit der Benutzerliste, wird auch hier eine Seitenblätterung angezeigt, sobald zu viele Benutzer für eine Seite vorhanden sind.
All diese feinen Features erhalten wir, ohne dafür eine einzige Zeile Code schreiben müssen!
Administrationsseite für Benutzer

Seite zum Erstellen eines neuen Benutzers
