Entwicklung & Design

Einstieg in TYPO3 Flow: Erste Schritte mit dem PHP-Framework

Seite 2 / 3

Als Schnittstelle zwischen Model und Datenbank benötigt man in TYPO3 Flow Repositorys. Bei einem Repository handelt es sich um ein Entwurfsmuster, das dazu dient, den Zugriff auf Domänen-Objekte von einer konkreten Persistenzschicht aus zu abstrahieren – so bleibt man auch dann flexibel, wenn zum Beispiel zu einem späteren Zeitpunkt der Wechsel auf eine andere Datenbank nötig ist. Mit folgendem Kommando kann man nun ein Repository für die Model-Klasse erstellen.

Ein Repository für die Model-Klasse

$ ./flow kickstart:repository T3n.Authors Author

Listing 4

Das Repository trägt den Klassennamen \T3n\Authors\Domain\Repositoy\AuthorRepository. Die Klasse enthält noch keine eigenen Methoden. Die wichtigsten Methoden, die man braucht, um Objekte dieser Klasse aus der Datenbank zu laden und zu speichern, werden jedoch geerbt.

Fehlt nur noch der Controller, der die Schnittstelle zwischen Geschäftslogik und Nutzereingabe bildet. Mit der folgenden Zeile kann man einen Controller zur Verwaltung von Autoren sowie die dazugehörigen Views erstellen.

Ein Controller zur Verwaltung von Künstlern und Views

$ ./flow kickstart:actioncontroller --generate-actions --generate-templates T3n.Authors Author

Listing 5

Dieser Befehl erstellt einen neuen Controller mit dem Dateinamen Classes/Controller/AuthorController.php sowie diverse Views im Verzeichnis Resources/Private/Templates/Author. Die Controller-Klasse zeigt den grundlegenden Aufbau eines Controllers:

Eine einfache Controller-Klasse

<?php
namespace T3n\Authors\Controller;

use TYPO3\Flow\Annotations as Flow;
use TYPO3\Flow\Mvc\Controller\ActionController; 
use T3n\Authors\Domain\Model\Author;

/** 
 * @Flow\Scope("singleton") 
 */ 
class AuthorController extends ActionController { 

	/**
	 * @Flow\Inject 
	 * @var \T3n\Authors\Domain\Repository\AuthorRepository 
	 */
	protected $authorRepository; 
	
	public function indexAction() {
		$this->view->assign('authors', $this->authorRepository->findAll()); 
	}

	public function showAction(Author $author) { 
		$this->view->assign('author', $author); 
	}

	// Weitere action-Methoden...
}

Listing 6

Der Controller enthält für jede mögliche Benutzerinteraktion eine Action-Methode. Für jede Action existiert im Verzeichnis Resources/Private/Template/<Controller> eine Fluid-Vorlage. Für die Index-Action liegt sie beispielsweise unter Resources/Private/Template/Author/Index.html. Über das Kommando „$this->view->assign“ kann man der View Variablen zuweisen, die sich dort wieder auswerten lassen – doch dazu später mehr.

Interessant ist weiterhin die Annotation @Flow\Inject. Sie sorgt dafür, dass dem Attribut $authorRepository automatisch eine Instanz der angegebenen Klasse zugewiesen wird. Dieses Entwurfsmuster wird auch als Dependency Injection bezeichnet. Um die Erstellung und Zuweisung der Instanzen aller benötigten Klassen kümmert sich das Framework von alleine. Der Entwickler muss an dieser Stelle einfach die @Flow\Inject-Annotation setzen.

An der showAction-Methode lässt sich auch erkennen, dass Flow Benutzereingaben – zum Beispiel in Form von GET- und POST-Parametern – automatisch auf die Methodenparameter abbildet. Wird die show-Action also mit dem Parameter &author=1 aufgerufen, sorgt Flow automatisch dafür, den Autor mit der entsprechenden ID aus der Datenbank zu laden. Diesen Vorgang bezeichnet man als Property Mapping.

Was ist Domain-Driven Design?
Domain-Driven Design (DDD) ist ein Begriff, den der Programmierer Eric Evans 2003 prägte http://t3n.me/VfJbls. DDD ist kein konkretes Architekturmuster http://martinfowler.com/books/, sondern vielmehr eine Herangehensweise für den Entwurf komplexer, objektorientierter Software. Dabei geht man von der Annahme aus, dass die eigentliche Komplexität eines Software-Projekts im Normalfall nicht von technischen Faktoren abhängt, sondern von der Gestaltung der Geschäftslogik, der Anwendungsdomäne. Um Missverständnisse zu vermeiden, setzt das DDD auf eine enge Zusammenarbeit zwischen Entwicklern und Domain Experts. Gemeinsam entwickeln sie in einem schrittweisen Prozess eine gemeinsame Vorstellung des Projekts inklusive klar benannter Objekte, deren Zusammenhänge und gewünschtem Funktionsumfang: das Domain-Model.

Die in diesem Tutorial dargestellte Autorenverwaltung lässt sich mit einer Default-Installation von TYPO3 Flow
im Browser unter http://localhost/t3n.authors/author aufrufen. Die
Abbildung von URLs auf Controller-Actions kann man übrigens über die
Datei „Routes.yaml“ im Order „Configuration“ von TYPO3 Flow frei konfigurieren.

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

Schreib den ersten Kommentar!