
Die Route
Die Routen werden in die Dateiapp/config/routing.yml
eingetragen. In der Regel wird hier das Routing-File des Bundles importiert. So kann man die Routen der einzelnen Bundels bequem in den Konfigurationsdateien des Bundels pflegen. Wenn das Bundel mittels der Symfony-Konsole angelegt wurde, ist ein entsprechender Eintrag bereits vorhanden. Es sollte in etwa so aussehen:
@AcmeHelloBundle
entspricht dem logischen Namen des Bundles. Es wird also die Datei routing.yml
aus dem Verzeichnis /Resources/config/
innerhalb des Bundles AcmeHelloBundle
geladen. Das Bundle befindet sich unter /src/Acme/HelloBundle/
.
In der Datei routing.yml
des Bundles können die Routen eingetragen werden:
Unter Path
steht die URL, auf die reagiert werden soll. In diesem Fall ist es /hello/{name}
. Der Teil in den Klammern ist ein Parameter. Wird also /hello/Ryan
aufgerufen, trifft die Route zu und es wird der entsprechende Controller ausgeführt. Der Controller wird mit plains: { _controller: AcmeHelloBundle:Hello:index }
definiert. Es wird der Controller Hello
im Bundle AcmeHelloBundle
ausgeführt, genauer gesagt die index
-Methode.
An dieser Stelle kann es etwas verwirrend werden. Aus meiner Sicht ist die Sache mit den Namen in Symfony für Anfänger etwas unglücklich. Symfony hängt an die Controller-Klassen ein
Natürlich sind die Routen noch viel leistungsfähiger, aber auf die Feinheiten gehe ich in einem eigenen Text ein.
Controller
und an die Methoden ein Action
. Die gesuchte Klasse heißt also eigentlich HelloController
und die Methode heißt indexAction
.
Der Controller
Der Controller bekommt die Anfrage und erzeugt eine Rückgabe, meist ist dies ein HTML-Dokument, es kann aber auch vieles andere sein (z.B. ein Bild, ein JSON-Stiring, o.ä.). Um bei dem Beispiel aus dem Handbuch zu bleiben, legen wir jetzt einen Controller namensHelloController
im Bundle AcmeHelloBundle
an. Die Datei sollte unter dem Namen src/Acme/HelloBundle/Controller/HelloController.php
angelegt werden und folgendes beinhalten:
In Zeile 3 wird der Namespace für das Response-Objekt gesetzt. In Zeile 7 beginnt die Klasse und in Zeile 9 die Methode indexAction
, diese übernimmt den Parameter $name
. Das Response-Objekt wird in Zeile 11 erstellt und gleich zurückgegeben.
Jeder Controller muss ein Response-Objekt zurück geben!
Natürlich bekommen auch die Controller noch einen eigenen Text. Da es sehr umständlich ist den HTML-Code in den Controller zu schreiben (eigentlich will man ja auch gerade das durch den Einsatz eines Frameworks vermeiden), gibt es die Templates.Die Templates
Symfony2 benutzt die Template-Engine Twig, eine sehr leistungsfähige und trotzdem einfache Template-Sprache. Damit nun das Template nachher auch ausgegeben wird, muss zuerst die Zeile 10 des Controllers angepasst werden. Hier wird nun mit$this->render()
das Template ausgegeben. Der Methode wird als erster Parameter der logische Name des Templates und als zweiter ein Array mit den Parametern übergeben, die im Template benutzt werden sollen. Im ganzen sieht es dann so aus:
Bei den meisten Systemen ist es so, dass es der Inhalt von Subtemplates erzeugt und anschließend in die übergeordneten Templates eingefügt wird. Dies ist relativ unflexibel, da man den Inhalt später nicht mehr ändern kann. Twig geht den umgekehrten Weg, hier wird im Template definiert, welches übergeordnete Template erweitert wird. Man kann deshalb ein Template mit folgendem Inhalt erstellen:
In Zeile 3 wird das Standardtemplate base.html.twig
als übergeordnetes Template definiert, hier wird der logische Name weggelassen, da es in app/Resources/views/
gespeichert ist und somit zur "Grundausstattung" von Symfony gehört. In Zeile 5 bis 7 wird ein Block definiert und in Zeile 6 die Variable $name
ausgegeben. Variablen werden durch doppelte geschweifte Klammern gekennzeichnet. Eine geschweifte Klammer gefolgt von einem Prozentzeichen ist ein Befehl (z.B. ein Block, ein if-Abfrage oder eine Schleife).
Das Standardtemplate sieht folgendermaßen aus:
In Zeile 12 sieht man den leeren Block body
, der von dem neuen Template befüllt wird.
Natürlich kann auch Twig viel mehr, auch dazu komme ich noch.
Kommentare
Aufgrund der unklaren Rechtslage durch die DSGV habe ich mich entschlossen, die Kommentare bis auf Weiteres zu deaktivieren.