In diesem Artikel möchte ich an einem praktischen Beispiel aufzeigen, wie einfach es ist, mit dem Yii-Framework eine Web-Applikation zu erstellen. Als Beispiel wird ein simples Verwaltungsprogramm für eine Bibliothek erstellt. Vor dem Eintauchen in die eigentliche Materie möchte ich den Unterschied zwischen einem CMS (z.B. Joomla, WordPress, TYPO3, etc.) und einem Framework erläutern.
Ein CMS bietet die Möglichkeit den Inhalt einer Website auf einfachste Art und Weise zu verwalten. Grundfunktionalitäten
sind bereits ausprogrammiert und Sie brauchen sich nur noch um die Menustruktur und den Inhalt zu kümmern.
Im
Gegensatz dazu handelt es sich bei einem Framework um einen "Werkzeugkasten" für Programmierer. Die Logik müssen Sie
programmieren, jedoch nimmt Ihnen das Framework triviale Arbeiten wie Datumsumrechnungen oder das Speichern von
Datensätzen ab. Eine solche Werkzeugsammlung ist das Yii-Framework. Yii ist gratis und unter Einhaltung der
BSD-Lizenz zur Verwendung freigegeben.
Wie Sie das Yii-Framework installieren, wird auf der Tutorialseite des Frameworks erläutert. Damit Sie loslegen können, brauchen Sie folgende Software auf Ihrer Maschine:
- Web- & Datenbankserver (z.B. all in one: XAMPP)
- Das eigentliche Yii-Framework
- Ein Quellcode-Editor wie Notepad++ oder gar die Eclipse IDE
- Eine Datenbankverwaltungssoftware wie die MySQL-Workbench
- Alle Programme sind kostenlos und können unter Einhaltung der jeweiligen Lizenzen auf den verlinkten Webseiten heruntergeladen werden.
Kapitelübersicht
1.Wieso das Yii-Framework
Es gibt unzählige PHP-Frameworks. Was also unterscheidet das Yii-Framework von ähnlichen Produkten wie dem Zend-Framework, CakePHP und CodeIgniter? Auch bei Yii handelt es sich um ein MVC-Framework mit ähnlichem Funktionsumfang wie die Produkte der Konkurrenz. Nach einigen Jahren Erfahrung mit dem Produkt würde ich die Frage mit den folgenden Wörtern beantworten: Geschwindigkeit und Einfachheit. Ausserdem ist Yii keine Insellösung, sondern lässt sich problemlos mit Teilen von Drittframeworks erweitern.
Yii bedeutet "yes it is" und liefert bereits im Namen die Antwort auf Fragen wie "ist es schnell?" oder "ist es sicher?". Detaillierte Speed-Messungen und Erläuterungen dazu finden Sie auf der offiziellen Website. Was es mit der Einfachheit auf sich hat, wird in den nächsten Abschnitten deutlich.
2.Database First
Bei der Entwicklung einer Web-Applikation mit Yii beginnen Sie in der Regel mit der Datenstruktur. Das Yii-Framework kann mit unzähligen Datenbanksystemen umgehen. In diesem Beispiel arbeiten wir mit einem der populärsten: MySQL.
Abstrahiert man die realen Objekte einer Bibliothek, erhält man die folgenden Tabellen:
- Buch
book
- Author
author
- Kunde
client
Folgende Beziehungen zwischen den Objekten werden angenommen:
- Ein Buch gehört zu mindestens einem, vielleicht aber auch zu mehreren Autoren
- Ein Autor kann mehrere Bücher haben
- Ein Buch kann von einem Kunden ausgeliehen werden
Das resultierende Datenbankschema ist auf nebenstehendem Bild ersichtlich.
3.Code-Generierung mit Gii
Ja, Sie haben richtig gelesen. In diesem Schritt wird Quellcode generiert. Nach anfänglicher Skepsis war ich schnell von diesem Feature überzeugt. Die Logik hinter "Gii" - so der Name der Generierungs-Tools - ist ausgefeilt und der generierte Code sauber.
Die Generierung erfolgt in zwei Schritten:
- Generieren der Models anhand der bestehenden Datenbank-Tabellen und deren Relationen
- Generieren der Views & Controllern
Model
So sieht die Model-Datei der Tabelle book
aus, welche Yii generiert hat:
Wie man sieht wird in diesen wenigen Zeilen von der Spaltenbezeichnung über die Validationen und Relationen alles geregelt. Zu diesem Zeitpunkt haben Sie noch keine Zeile Code geschrieben. Gii hat all diese Informationen selbst anhand des Datenbank-Schemas abgeleitet und im Code umgesetzt.
Die Methode rules()
regelt die Validierung der Formulareingaben. Yii bietet dazu eine Vielzahl an
vorgefertigten Validatoren an, welche zusätzlich konfiguriert werden können. Diese Validatoren decken 95%
aller Fälle ab.
In relations()
werden Model-Beziehungen definiert. Auf Zeile 58 sehen Sie, wie Yii
automatisiert eine m:n-Beziehung auflöst. Im Code können Sie über den Aufruf $authors = $book->authors;
direkt auf die Autoren zugreifen. Das Schreiben von langen Datenbank-Queries gehört der Vergangenheit an und
ist nur noch in Ausnahmesituationen nötig. Der Code bleibt sauber und übersichtlich.
Die Methode attributeLabels()
legt lesbare Labels zu den Datenbankspalten fest. Hier kann
auch Internationalization (i18n) eingesetzt und die Spaltennamen über Sprachdateien eingelesen werden.
Möglichkeiten zur Mehrsprachigkeit bietet Yii ebenfalls vollumfänglich.
Zu guter Letzt wird in search()
die Suche von Büchern geregelt.
Die Methode scopeIsBorrowed($borrowed=true)
habe ich bereits hinzugefügt um die Möglichkeit von
Named-Scopes aufzuzeigen. Dies ist eine Möglichkeit, ein Model zu erweitern. Dieser Scope erlaubt es Ihnen nun direkt
auf ausgeliehene Bücher zuzugreifen. Book::model()->scopeIsBorrowed()->findAll()
liefert nun eine
Liste aller ausgeliehenen Bücher. Solche Scopes können auch verknüpft werden.
Controller
Analog zur Generierung des Models können Sie auch den Controller und die Views zu den CRUD-Operationen des Objekts Buch generieren. Yii bietet für die meisten Standard-Aufgaben bereits pfannenfertige Widgets an. Eine tabellarische Auflistung mit Filter-Funktion pro Spalte ist ebenso vorhanden wie Detailansichten, Menus und Formularelemente.
Nachfolgend der Code zum BookController
.
Yii basiert auf suchmaschinenoptimierte URLs, die vollumfänglich konfigurierbar sind. Jede Browserseite entspricht
der Action eines Controllers. Yii setzt das Front-Controller-Pattern ein und leitet so einen Request an den
entsprechenden Controller und die zugehörige Action weiter. Ein neues Buch können Sie also über die URL
http://www.my-domain.ch/buch/create
erfassen. buch
ist dabei der Controller und
create
die zugehörige Action. Der Code dazu finden Sie im vorangehenden Code-Ausschnitt in der Methode
actionCreate()
auf Zeile 43.
view
Am Schluss einer Controller-Action müssen Sie eine View mit Daten befüllen und ausgeben:
$this->render('admin', array('model'=>$model));
. Nachfolgend finden Sie den Inhalt der
actionAdmin
, welche ein Listen-Widget aller Bücher mit Such- und Sortierfunktion ausgibt.
4.Was muss ich denn eigentlich noch tun?
Yii nimmt Ihnen alle grundlegenden Arbeiten ab. Einzig kleine Anpassungen Ihrerseits sind nötig, um den Code dem gewünschten Verhalten anzupassen. Ihre Aufgabe ist es schlussendlich die verschiedenen Objekte miteinander zu verknüpfen. Im vorliegenden Beispiel wäre dies im Formular nötig. Als Benutzer der Software möchten Sie beim ausleihen kaum Kunden-IDs eintragen. Viel angenehmer wäre ein Dropdown mit der Kundenliste zur Auswahl. Auf der Detailseite eines Kunden wäre es ausserdem wünschenswert alle Bücher zu sehen, welche ein Kunde zur Zeit ausgeliehen hat.
Die Hauptarbeit ist also das Umsetzen der Business-Logik und nicht wie bis anhin repetitive Aufgaben. Ausserdem müssen Sie das Design der Applikation Ihren Wünschen anpassen.
5.Wie weiter?
Wenn Sie weitere Informationen oder gar eine Yii-Schulung wünschen, können Sie gerne über das Formular auf unserer Webseite mit uns in Kontakt treten. Allgemeine Informationen zu unserem Angebot im Bereich Web-Applikationen finden Sie auf der Seite Software Engineering im Bereich Web.
Natürlich gibt es auch gute Fachliteratur zum Yii-Framework. Ich empfehlen Ihnen die folgenden Bücher:
- Web Application Development with Yii and PHP
Ein gutes Buch für den Einstieg in Yii - Yii Application Development Cookbook
Code-Beispiele und Anleitungen für die häufigsten Problemstellungen - Yii Rapid Application Development Hotshot
Yii an Praxis-Beispielen erklärt
6.Schlussfolgerung
Yii ist ein mächtiges Werkzeug ohne dabei aufgeblasen zu wirken. Es werden immer nur die Framework-Teile geladen, welche auch effektiv verwendet werden. Dasselbe gilt für Datenbankzugriffe. Relationen werden - ausser es wird explizit anders verlangt - erst bei Gebrauch aufgelöst. Die Entwicklung mit dem Framework geht sogar so leicht von der Hand, dass Sie es ohne Probleme für Rapid-Prototyping verwenden können.
Durch die einfache Erweiterbarkeit und offene Architektur lässt sich das Framework beliebig um fehlende Funktionalitäten ergänzen. Zudem existiert bereits eine riesige Fan-Gemeinde, welche Extensions zu allen erdenklichen Problemen entwickelt. Besonders empfehlen möchte ich die Bootstrap-Extensions für Yii. Diese bieten einem nicht nur tolle Widgets, sondern auch ein schickes Grundstyling der gesamten Applikation. Die populärsten Bootstrap-Erweiterungen sind Yii-Booster und neu Yiistrap. Eine dieser beiden Erweiterungen sollte bei jeder Yii-Installation eingesetzt werden.
Für das vollständige Verständnis des Frameworks ist eine solide Grundlage der objektorientierten Programmierung unabdingbar. Bringen Sie diese mit, steht Ihrem ersten Yii-Abenteuer nichts mehr im Weg. Probieren Sie es aus!
Auf welche Technologien setzen Sie? Schreiben Sie uns Ihre Meinung in einem Kommentar. Wir sind gespannt!