t3n 31

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

Schreib den ersten Kommentar!

Du musst angemeldet sein, um einen Kommentar schreiben zu können.

Jetzt anmelden

Hey du! Schön, dass du hier bist. 😊

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

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

Danke für deine Unterstützung.

Digitales High Five,
Stephan Dörner (Chefredakteur t3n.de) & das gesamte t3n-Team

Anleitung zur Deaktivierung