Flutschende Vorlagen
Die merkwürdigen, mit einem »<f:«
beginnenden Tags sind Platzhalter. Fluid ersetzt sie gegen andere HTML-Schnipsel, die so genannten Sektionen. Im Beispiel-Layout gibt es zwei Sektionen, die eine heißt »Title«
, die andere »Content«
. Wie diese Sektionen aussehen, steht in einer weiteren Datei, dem so genannten Template, das in Listing 7 zu sehen ist. Im Beispiel liegt es unter »Roxy.Filme/Resources/Private/Templates/Film/Index.html«
. Diese Datei enthält alle Sektionen für das Layout der Datei »Default.html«
, worauf auch gleich die erste Zeile in Listing 7 hinweist.
Listing 7
Template Index.html
01 <f:layout name="Default" />
02
03 <f:section name="Title">A list of films</f:section>
04
05 <f:section name="Content">
06 <f:if condition="{films}">
07 <f:then>
08 <ul>
09 <f:for each="{films}" as="film">
10 <li>
11 <f:link.action action="show" arguments="{film: film}">{film.name}</f:link.action>
12 <f:link.action action="edit" arguments="{film: film}">Edit</f:link.action>
13 <f:link.action action="delete" arguments="{film: film}">Delete</f:link.action>
14 </li>
15 </f:for>
16 </ul>
17 </f:then>
18 <f:else>
19 <p>No films created yet.</p>
20 </f:else>
21 </f:if>
22 <p><f:link.action action="new">Create a new film</f:link.action></p>
23 </f:section>
Die Sektion »Title«
enthält nur den Text »A list of films«
. Der Inhalt der Sektion »Content«
(Zeile 5) ist etwas komplexer. Zunächst prüft Fluid aufgrund der für ihn bestimmten Anweisung »<f:if condition="{films}">«
, ob der Controller überhaupt eine Liste mit Filmen übergeben hat. Die geschweiften Klammern greifen auf die vorhin per »assign()«
in die View gepresste Variable zu. Sofern diese Variable leer ist, also noch kein Film existiert, landet nur der Hinweis »<p>No films created yet.</p>«
auf dem Bildschirm (Zeile 19).
Andernfalls durchläuft die For-Each-Schleife ab Zeile 9 alle vorhandenen Filme und erstellt für jeden von ihnen die drei Links zum Anzeigen, Bearbeiten und Löschen (Zeilen 11 bis 13). Wenn der Benutzer später den Link anklickt, soll der Controller die in »action«
angegebene Aktion ausführen. Der Controller startet dann beispielsweise die Funktion »editAction()«
. Sie erhält als Argument (»arguments="..."«
) den aktuellen Film übergeben.
Diese Automatik funktioniert aber zumindest in diesem Beispiel nicht ganz perfekt: Sobald der Benutzer einen Film angelegt hat, fehlt dessen Name in der Liste. Der Übeltäter versteckt sich in Zeile 11 des Template: Hier landet »{film.name}«
in der Ausgabe. Das Attribut »name«
gibt es im Film-Objekt jedoch nicht, korrekt wäre hier der »titel«
:
<f:link.action action="show" arguments="{film: film}">{film.titel}</f:link.action> Bis hierher ist übrigens keine einzige Zeile eigener Code fällig, Flow3 hat alle Klassen selbst generiert.
Flow3 zwingt den Entwickler dazu, moderne Programmierkonzepte konsequent anzuwenden. Was auf den ersten Blick wie Gängelung wirkt, vereinfacht gerade in größeren Projekten die Entwicklung, hilft Fehler vermeiden und macht die Produktpflege zum Kinderspiel.
Im Gegensatz zu anderen Komponenten-basierten PHP-Frameworks lassen sich allerdings keine einzelnen Teile aus Flow3 herauslösen und separat nutzen. Im Gegenzug versprechen die Entwickler jedoch, dass sich mit Flow3 entwickelte Anwendungen später recht einfach als Erweiterung an Typo3 Phoenix anflanschen lassen.
Ausblick
Dieser Artikel konnte nur einen kleinen Einblick in den Leistungsumfang von Flow3 geben. Wer mehr wissen will, sollte sich in die gelungene Dokumentation vertiefen, auch wenn sie an einigen Stellen noch Lücken aufweist [8]. Offene Fragen klären mehrere Mailinglisten und ein eigener Flow3-Kanal im IRC, in dem man auch die Entwickler trifft [9].
Für die kommenden Flow3-Versionen 1.1 und 1.2 steht die Agenda übrigens schon fest [2]: Das Framework soll sich vor allem agiler verhalten und ein Package-Repository erhalten. Letzteres dient dann ähnlich wie das Extensions Repository von Typo3 als eine Art Marktplatz für Extensions. (mhu)
Infos
- Flow3: http://flow3.typo3.org/
- Interview mit Robert Lemke: http://www.heise.de/developer/artikel/Robert-Lemke-im-Interview-zu-FLOW3-1362225.html
- Doctrine-Projekt: http://www.doctrine-project.org
- Liste mit PDO-Treibern: http://www.php.net/manual/de/pdo.drivers.php
- XAMPP: http://www.xampp.org
- Yaml: http://de.wikipedia.org/wiki/YAML
- Namensräume in PHP: http://php.net/manual/en/language.namespaces.php
- Dokumentation zu Flow3: http://flow3.typo3.org/documentation.html
- Support zu Flow3: http://flow3.typo3.org/support.html
Diesen Artikel als PDF kaufen
Express-Kauf als PDF
Umfang: 6 Heftseiten
Preis € 0,99
(inkl. 19% MwSt.)
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





