Also available in these languages:
DeutschEnglishEspañolFrançaisBahasa Indonesia日本語polskiPortuguêsRomâniaРусскийsvenska简体中文

Erstellen der ersten Yii-Anwendung

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 yiic unter Mac OS, Linux or Unix starten, müssen Sie evtl. die Zugriffsrechte der yiic-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

Startseite

Kontaktseite

Kontaktseite

Kontaktseite mit Eingabefehlern

Kontaktseite mit Eingabefehlern

Kontaktseite im Erfolgsfall

Kontaktseite im Erfolgsfall

Anmeldeseite

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

Verbindung zu einer Datenbank

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_pdo und php_pdo_sqlite aktiviert 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.

Implementierung von CRUD-Operationen

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, yiic wie folgt aufzurufen:

% php -c pfad/zu/php.ini protected/yiic.php shell

wobei pfad/zu/php.ini auf 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

Administrationsseite für Benutzer

Seite zum Erstellen eines neuen Benutzers

Seite zum Erstellen eines neuen Benutzers
$Id: quickstart.first-app.txt 1626 2009-12-28 01:37:19Z qiang.xue $
If you found any typos or errors in the tutorial, please create a Yii ticket to report it. If it is a translation error, please create a Yiidoc ticket, instead. Thank you.

Your Comment:

You may enter comment using Markdown syntax.

Please login with your forum account.
Note: you must have at least ONE forum post with your account.