Anzeige
Anzeige
UX & Design
Artikel merken

Erste Schritte mit dem neuen PHP-Framework: Einstieg in FLOW3

Die Entwicklung von FLOW3, der neuen Basis für die nächste TYPO3-Generation, schreitet stetig voran. Ein erstes Release für die Nutzung in eigenen Projekten ist noch für dieses Jahr geplant. An der wichtigsten Voraussetzung hierfür, der Entwicklung der Persistenz-Schicht und des Content Repositories, wird derzeit intensiv gearbeitet. Grund genug, einen Blick auf die Entwicklung mit FLOW3 zu werfen und einige erste Experimente zu wagen.

8 Min. Lesezeit
Anzeige
Anzeige

Aktuell ändert sich die Code-Basis von FLOW3 [1] mehrmals täglich. Um unerfahrene Entwickler nicht zu enttäuschen, hat sich das Projektteam dazu entschlossen, vorerst keine fertigen Pakete zum Download anzubieten. Der Weg zum FLOW3-Sourcecode führt daher über das Subversion-Repository [2].

Download und Installation

Anzeige
Anzeige

Um FLOW3 auszuprobieren, benötigen Sie einen Webserver mit einer aktuellen PHP-Version (5.2.0 oder höher). In unseren Beispielen gehe ich davon aus, dass Sie FLOW3 auf Ihrem lokalen Rechner, auf dem Linux oder MacOS X läuft, installieren möchten [3]. FLOW3 läuft auch unter Windows, hier sind lediglich die Schreibweisen und einzelne Befehle etwas anders. Sollte mal etwas schiefgehen, helfen
die FLOW3-Entwickler in der TYPO3-5.0-Mailingliste gerne weiter [4].

Erstellen Sie zunächst ein Verzeichnis innerhalb Ihres Webroots, in das Sie FLOW3 installieren möchten. Anschließend laden Sie FLOW3 mit Hilfe des Subversion-Clients herunter.

Anzeige
Anzeige
SHELL
$ mkdir /opt/local/www/FLOW3
$ svn checkout https://svn.typo3.org/FLOW3/Distribution/trunk /opt/local/www/FLOW3/
Ausgecheckt, Revision xxxx.

Listing 1

Da FLOW3 einige Dateien in das „Public/“-Verzeichnis schreiben wird, müssen Sie sicherstellen, dass dieses für die Benutzer, die FLOW3 aufrufen, auch schreibbar ist. Auf Ihrem Testserver erreichen Sie das am besten mit folgendem Befehl:

Anzeige
Anzeige
SHELL
$ chmod -R 777 /opt/local/www/FLOW3/Public

Listing 2

Als nächstes überprüfen Sie, ob FLOW3 erfolgreich installiert wurde. Je nachdem, wie Sie Ihren Webserver konfiguriert haben, sollten Sie unter der Adresse http://localhost/FLOW3/Public die Standardansicht des MVC-Frameworks sehen (siehe Abbildung).

Konfiguration des Webservers
Wenn FLOW3 später einmal in einer produktiven Umgebung genutzt wird (Sie sollten bis dahin auf ein offizielles Release warten), empfehlen wir, das Wurzelverzeichnis des Webservers oder virtuellen Hosts (den „Document Root“) auf das „Public/“-Verzeichnis von FLOW3 zu setzen.
Hiermit erreichen Sie, dass sämtlicher Quellcode und eventuell im Dateisystem vorhandene Daten von außen nicht erreichbar sind – mit Ausnahme der „index.php“ und den von FLOW3 in das öffentliche Verzeichnis gespiegelten Ressourcen.
Außerdem benötigen Sie für die korrekte Auflösung von virtuellen Pfadnamen das Webserver-Modul „mod_rewrite“ (Apache) bzw. „ISAP_rewrite“ (IIS). Eine .htaccess-Datei mit den notwendigen Einstellungen für den Apache liefert FLOW3 mit.

Hello World

Bevor wir uns einige Mechanismen von FLOW3 im Detail anschauen, erstellen wir eine Hello-World Applikation mit FLOW3.

Anzeige
Anzeige

FLOW3 ist ein paketbasiertes System. Einzelne Applikationen und Erweiterungen sind jeweils in Paketen gebündelt. Ein Paket kann viele unterschiedliche Daten enthalten, unter anderem Dokumentation, Übersetzungen, Bilder und andere Ressourcen – und natürlich PHP-Klassen. Ein neues Paket legen Sie an, indem Sie ein Unterverzeichnis im Verzeichnis „Packages“ erstellen. PHP-Klassen befinden sich wiederum in einem Unterverzeichnis namens „Classes“. Die Dateinamen entsprechen dabei jeweils genau dem Klassennamen.

Legen Sie nun eine neue PHP-Datei und die dazugehörigen Verzeichnisse an. Die Klasse wird den Namen „F3_Demo_Controller_Default“ tragen:

SHELL
$ cd /opt/local/www/FLOW3/
$ mkdir -p Packages/Demo/Classes/Controller
$ touch Packages/Demo/Classes/Controller/F3_Demo_Controller_Default.php

Listing 3

Sie brauchen diese Schritte nicht auf der Kommandozeile auszuführen, sondern können Sie bequem aus Ihrer Entwicklungsumgebung vornehmen. Jetzt füllen Sie die leere PHP-Datei noch mit einigen Zeilen Code, die das „Hello World“ ausgeben:

Anzeige
Anzeige
PHP
<?php
class F3_Demo_Controller_Default extends F3_FLOW3_MVC_Controller_ActionController {
	public function defaultAction() {
		return 'Hello World!';
	}
}

Listing 4

Wenn Sie (und die Core-Entwickler) alles richtig gemacht haben, erhalten Sie nun unter der Adresse http://localhost/FLOW3/Public/Demo die gewünschte Ausgabe.

Eine Frage des Kontexts

FLOW3 kann für verschiedene Situationen unterschiedliche Konfigurationen definieren, die in einem so genannten „Application Context“ gebündelt werden. In Projekten häufig vorkommende Kontexte sind etwa der produktive Einsatz, die Entwicklung oder das (automatisierte) Testen. Aber auch unterschiedliche Umgebungen, wie etwa mehrere Live-Server oder Entwicklungs-Rechner, können unterschiedliche Konfigurationen erfordern.

Von Haus aus kennt FLOW3 die Kontexte „Production“, „Development“ und „Testing“ und liefert jeweils sinnvolle Einstellungen für die verschiedenen Anwendungsfälle mit. So sind etwa im „Production“-Kontext standarmäßig sämtliche Caches aktiv und viele Programmteile auf gute Performance optimiert. Während der Entwicklung würden diese Caches stören, weshalb viele davon im „Development“-Kontext abgeschaltet sind.

Anzeige
Anzeige

Sie können FLOW3-Applikationen jederzeit in unterschiedlichen Kontexten starten, indem Sie hierfür eine eigene „index.php“ erstellen. Aktuell befindet sich in der Distribution ein Skript zum Aufruf des „Development“-Kontexts: Rufen Sie einfach statt der URL http://localhost/FLOW3/Public die Adresse http://localhost/FLOW3/Public/index_dev.php auf und schon ist die Konfiguration des „Development“-Kontexts aktiv.

Denken Sie daran, während Sie entwickeln stets den Entwicklungs-Kontext zu verwenden – sonst erhalten Sie unerwartete Ergebnisse, da zahlreiche Informationen über die verschiedenen Klassen im „Production“-Kontext zwischengespeichert werden.

Modelviewcontroller

Wenn man die Gespräche von PHP-Entwicklern in der letzten Zeit belauscht, könnte man meinen, dass „Modelviewcontroller“ inzwischen zum Standardvokabular eines jeden gehört. Das MVC-Muster ist zwar eines der wichtigsten Prinzipien in der Entwicklung sauber strukturierter Anwendungen, allerdings gibt es kaum ein Entwurfmuster, das so viele Varianten in der Umsetzung erlaubt. Ein einfaches „Ich benutze MVC“ sagt also nicht viel aus.

Anzeige
Anzeige

FLOW3 setzt einen so genannten Front-Controller ein, der sämtliche Anfragen – aus dem Web oder der Kommandozeile – entgegennimmt. Durch verschiedene Analyse- und Routing-Mechanismen wird dann festgelegt, welcher Controller letztlich für die Beantwortung der Anfrage zuständig ist. Üblicherweise ist dies ein Action Controller (wie in unserem Hello-World-Beispiel), der verschiedene Aktionen unterstützt, die jeweils als Methode in der Controller-Klasse implementiert sind.

Der Controller wird – je nach gewünschter Aktion – ein passendes Modell auswählen. Ein Modell ist von den dreien das natürlichste Objekt, eines das sich unter Umständen auch in der realen Welt wiederfindet. So könnte es sich beispielsweise um das Modell eines Kunden oder einer Veranstaltung handeln. Dieses Modell wird dann vom Controller an einen View weitergereicht, mit dem Auftrag, eine dem Modell und der Situation angepasste Darstellung zu rendern. Schließlich liefert der Controller in einer Antwort die Ausgabe des Views an den Front-Controller zurück.

Ein Beispiel für die Einbindung von Views und den dazugehörigen Konventionen für die Benennungen von Verzeichnissen und Klassen finden Sie im FLOW3-Handbuch [5].

Anzeige
Anzeige

Argumente und Validierung

Fast jede Applikation möchte am Ende mit dem Benutzer kommunizieren und dessen Eingaben verarbeiten. Im Web geschieht dies normalerweise über den Austausch von GET- bzw. POST-Parametern, die über Formulare abgeschickt werden. Die hohe Anzahl an Security-Bulletins zeigt jedoch, dass dies oft der wunde Punkt von webbasierten Anwendungen ist – ungefiltert können die Eingaben durch Cross-Site-Scripting (XSS) oder SQL-Injection schwerwiegende Sicherheitsprobleme aufwerfen.

FLOW3 verweigert standardmäßig den Zugriff auf GET- und POST-Parameter und reicht diese nur gefiltert an den Controller weiter. Sämtliche erwarteten Argumente müssen vorher registriert werden, unbekannte Parameter werden ignoriert.

Zusätzlich wird für jedes Argument der erwartete Datentyp definiert, so dass schon im Vorfeld eine Validierung stattfinden kann. Probieren Sie es doch einfach einmal aus und ändern den Code aus dem Hello-World-Beispiel wie folgt ab.

Anzeige
Anzeige
PHP
F3_Demo_Controller_Default.php
<?php
class F3_Demo_Controller_Default extends F3_FLOW3_MVC_Controller_ActionController {	
	public function initializeController() {
		$this->arguments->addNewArgument('firstName', 'Text');
	}	
	public function defaultAction() {
		return (string)$this->arguments['firstName'];
	}
}
?>

Listing 5

Wenn Sie die Adresse http://localhost/FLOW3/Public/index_dev.php/Demo?firstName=Robert in Ihrem Browser aufrufen, sollten Sie die Ausgabe „Robert“ sehen können (vorausgesetzt, Sie haben FLOW3 so installiert wie zuvor beschrieben).

Wie Sie dem Listing entnehmen können, wird das Argument „firstName“ registriert und als „Text“ deklariert. Probieren Sie einmal andere Datentypen aus (beipielsweise „Number“ oder „EmailAddress“) und experimentieren Sie mit verschiedenen Werten für den Parameter.

Die Definition der Argumente ist natürlich nur ein erster Schritt, denn die hier vorgestellte Validierung ist nur ein Teil eines mächtigen Filter- und Validierungsframeworks, das neben den eingebauten auch eigene Validatoren unterstützt. Mehrere solche Validatoren lassen sich zudem in Ketten verbinden und wiederverwenden, um auch komplexere Überprüfungen zu ermöglichen. Doch neben Validierung sind auch Authentifizierung und Autorisierung wichtige Themen bei der Entwicklung von Webapplikationen.

Sicherheitsaspekte

Zurzeit entwickelt Andreas Förthner ein umfangreiches Security-Framework. Die Besonderheit an der Lösung in FLOW3 ist, dass Sicherheitsfunktionen zentral implementiert und gesteuert und nicht wie bisher an vielen unterschiedlichen Stellen berücksichtigt werden müssen.

Für Ihren Action-Controller bedeutet das, dass Sie nicht weiter überprüfen müssen, ob es etwa einen angemeldeten Benutzer gibt, der Mitglied einer Gruppe ist, die es ihm erlaubt, die gewünschte Aktion durchzuführen. Sie entwickeln Ihre Aktionsmethode ohne eine einzige Zeile sicherheitsrelevanten Code. Stattdessen wird das Security-Framework über FLOW3s AOP-Funktionen (Aspektorentiertes Programmieren) die notwendigen Überprüfungen in Ihren Code einweben. Durch diesen Ansatz haben Sie außerdem die Möglichkeit, auch solche Programmteile im Nachhinein zu schützen, die ursprünglich vom Autor nicht dafür vorgesehen waren. Auch das Thema SQL-Injection taucht in FLOW3-Applikationen nicht mehr auf – denn es wird kein SQL mehr verwendet.

Persistenz

Das sicherlich am sehnlichsten erwartete FLOW3-Feature ist das Persistenz-Framework und das dazugehörige Content Repository. Denn erst nach dessen Fertigstellung wird es möglich sein, auf einfache Art und Weise Daten zu speichern und wieder aufzurufen. Doch wie kommt man an seine Daten, wenn es kein SQL mehr gibt? Die Antwort lautet: gar nicht. Die Daten kommen zu Ihnen.

FLOW3 bietet eine besondere Unterstützung für das Domain-Driven-Design an (siehe T3N Nr. 11), die es dem Entwickler ermöglicht, sich voll auf die Domäne, also die Geschäftslogik, zu konzentrieren. Ein FLOW3-Entwickler denkt und entwickelt daher mit Objekten anstatt mit Datenbanktabellen – sicherlich kein leichter Umstieg, aber ein lohnenswerter. Nehmen wir das Beispiel eines Blog-Eintrags. Eine PHP-Klasse, die einen Blog-Eintrag repräsentiert, könnte in etwa so aussehen:

PHP
/**
 * @entity
 */
class F3_Blog_Domain_Post {
	/**
	 * @var string
	 */
	protected $title;

	/**
	 * @var DateTime
	 */
	protected $date;

	/**
	 * @var array
	 * @reference
	 */
	protected $tags = array();

	/**
	 * Setter for title
	 *
	 * @param string $title
	 * @return void
	 */
	public function setTitle($title) {
		$this->title = $title;
	}

	/**
	 * Adds a tag to the post
	 * @param F3_Blog_Domain_Tag $tag 
	 * @return void
	 */
	public function addTag(F3_Blog_Domain_Tag $tag) {
		$this->tags[] = $tag;
	}
?>

Listing 6

Natürlich wird es noch weitere Setter- und Getter-Methoden geben und weitere Funktionen wie etwa „publish()“, die es erlauben, einen Blog-Eintrag zu publizieren. Laut Domain-Driven-Design sammeln wir unsere Blog-Einträge in einer Blog-Eintrag-Aufbewahrung – denn nichts anderes ist unser PostRepository:

PHP
/**
 * @repository
 */
class F3_Blog_Domain_PostRepository {

	/**
	 * @var array
	 * @reference
	 */
	protected $posts = array();

	public function add(F3_Blog_Domain_Post $post) {
		$this->posts[] = $post;
	}
	public function remove($post) { ... }
	public function findByDate($date) { ... }
	...
}

Listing 7

Dieses Repository dient dazu, Blog-Einträge später wiederzufinden – zu diesem Zweck gibt es entsprechende „find*()“-Methoden, die die Posts nach einem bestimmten Kriterium zurückliefern.

So weit, so gut, kein besonders spannender Code. Aber das ist bereits alles was Sie benötigen, um Blog-Einträge zu speichern. FLOW3 erkennt, dass es sich bei Ihrem Blog-Eintrag um ein Objekt handelt, das persistiert werden kann (durch die @entity Annotation am Anfang der Klasse). Das allein sorgt jedoch noch nicht dafür, dass Ihr neues Post–Objekt auch persistiert wird. Sie müssen es erst noch zu einem passenden Repository – dem PostRepository – hinzufügen, indem Sie dessen „add()“-Methode aufrufen. FLOW3 erkennt sämtliche Repositories an Ihrer „@repository“-Annotation und sorgt dafür, dass seine Einträge gespeichert und wiederhergestellt werden, wenn Sie sie benötigen.

Ende des Jahres

So lautet zur Zeit die Antwort auf die Frage, wann man FLOW3 für erste eigene Projekte nutzen kann. Dass sich das Entwicklerteam bis dahin noch die eine oder andere Nacht mit vertrackten Aufgaben um die Ohren schlagen wird, hat einen einfachen Grund: Sie können es kaum erwarten, selbst damit zu arbeiten.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Schreib den ersten Kommentar!
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige