Artikel
von Patrick Froch

Ein einfacher Controller

Der Controller erhält die Daten der Anfrage und erstellt daraus die Antwort. Alles was unsere Anwendung tut, nimmt seinen Anfang im Controller. Wie man eine Seite inklusive Route und Controller anlegt, habe ich bereits im Artikel "Symfony2: Seite anlegen" beschrieben. Ein einfacher Controller kann folgendermaßen aussehen: In Zeile 3 wird der Namespace für die Klasse gesetzt. In Zeile 5 beginnt die Klasse, der Name setzt sich auch dem Namen des Controllers und dem Wort "Controller" zusammen. In Zeile 9 beginnt die eigentliche Controller-Methode. Diese Methoden enden immer mit "Action". In Zeile 11 wird das das Response-Objekt erstellt und zurückgegeben.

Routen

Die Konfiguration der Route für den Controller sieht z.B. so aus: Der Route wird nur gefolgt, wenn die Anfrage auf /hello gefolgt von einem Namen eingegeben wird. Der Parameter {name} wird an den Controller übergeben. Die Reihenfolge in der die Parameter im Controller notiert sind spielt keine Rolle, da Symfony die Werte automatisch den richtigen Parametern zuordnet.

Feste Argumente

Um einem Controller einen festen Wert zu übergeben, kann dieser einfach in der Routing-Konfiguration hinterlegt werden: Im Controller kann neben den Parametern aus der URL (/{first_name} und /{last_name}) auch mit $color auf den Wert green zugegriffen werden.

Spezielle Argumente

Es gibt einige spezielle Argumente, die nicht in der Routing-Konfiguration auftauchen. Es ist möglich sich ein Reuquest-Objekt geben zu lassen. Des Weiteren kann man sich mit $_controller den Namen des Controllers geben lassen und mit $_route den Namen der Route.

Basis-Controller

Symfony2 stellt einen Basis-Controller bereit. Wenn man seinen eigenen Controller von dieser Klasse ableitet, kann man auf viele hilfreiche Methoden zugreifen. Zunächst benötigen wir neben dem use für das Response-Objekt auch ein use-Statemant für den Controller: use Symfony\Bundle\FrameworkBundle\Controller\Controller;. Dann wird class HelloController zu class HelloController extends Controller. Im Ganzen sieht es dann so aus:

Häufige Aufgaben des Controllers

Auf einige häufig genutzte Aufgaben eines Controllers wird nun eingegangen. Es wird vorausgesetzt, dass der Controller wie im letzten Abschnitt beschrieben, von der Symfony-Klasse Controller abgeleitet wurde.

Redirecting

Will man auf eine andere Seite umleiten, geht dies z.B. so: Als zweites Argument kann der redirect-Methode noch der HTTP-Statuscode übergeben werden.

Forwarding

Statt den Browser des Nutzers auf die neue Seite weiterzuleiten, kann man ein Request auch direkt an einen anderen Controller übergeben. Hierzu wird der Controller mit den gewünschten Argumenten aufgerufen: Der Name des neuen Controllers wird in der gleichen Weise angegeben, wie in der Routing-Konfiguration.

Rendering Templates

Wenn man einmal den Inhalt eines gerenderten Templates statt eines Response-Objekts benötigt, geht dies mit renderView(). Der Inhalt kann dann z.B. in einem anderen Template verwendet oder nach einer Manipulation wieder in ein Response-Objekt verpackt werden. Letzteres sieht so aus: Will man ganz normal ein Response-Objekt zurückgeben, kann man es im Controller einfach mit render() machen: Es ist auch möglich, die Templates in Unterordnern zu organisieren: Dies soll für das Grundverständnis der Controller erst einmal reichen. Weitere Einzelheiten zu Controllern und angrenzenden Tehmen folgen in weiteren Artikeln.

Zurück

Kommentare

Aufgrund der unklaren Rechtslage durch die DSGV habe ich mich entschlossen, die Kommentare bis auf Weiteres zu deaktivieren.