Suche…
Einführung
Ein Controller in Symfony ist ein aufrufbares PHP (eine Funktion, eine Methode für ein Objekt oder ein Abschluss), das eine HTTP-Anforderung empfängt und eine HTTP-Antwort zurückgibt. Eine HTTP-Antwort kann alles enthalten: eine HTML-Seite, eine JSON-Zeichenfolge, ein Dateidownload usw.
Um Symfony mitzuteilen, welcher Controller eine bestimmte Anforderung verarbeiten soll, müssen Sie eine Route konfigurieren .
Syntax
- $ this-> generateUrl ('route_name', ['placeholder' => 'value']); // generiert eine URL für die Route
route_namemit einem Platzhalter - $ this-> render ('template.html.twig'); // rendert eine Twig-Vorlage und gibt ein Response-Objekt zurück
- $ this-> render ('template.html.twig', ['parameter' => $ value]); // rendert eine Twig-Vorlage mit einem Parameter
- $ this-> createNotFoundException ('Message') werfen; // löst eine NotFoundHttpException aus, die dazu führt, dass Symfony eine 404-Antwort zurückgibt
Bemerkungen
Controller sollten klein sein und sich auf die Verarbeitung von HTTP-Anforderungen konzentrieren. Die eigentliche Geschäftslogik Ihrer Anwendung sollte an verschiedene Teile Ihrer Anwendung delegiert werden, beispielsweise an Ihr Domänenmodell.
Eine einfache Controller-Klasse
// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
class HelloWorldController
{
public function helloWorldAction()
{
return new Response(
'<html><body>Hello World!</body></html>'
);
}
}
Rendern einer Twig-Vorlage
In den meisten Fällen möchten Sie HTML-Antworten aus einer Vorlage rendern, anstatt den HTML-Code in Ihrem Controller fest zu codieren. Außerdem sind Ihre Vorlagen nicht statisch, sondern enthalten Platzhalter für Anwendungsdaten. Symfony wird standardmäßig mit Twig geliefert, einer leistungsstarken Templatesprache.
Um Twig in Ihrem Controller zu verwenden, erweitern Sie die Basis- Controller Klasse von Symfony:
// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class HelloWorldController extends Controller
{
public function helloWorldAction()
{
$text = 'Hello World!';
return $this->render('hello-world.html.twig', ['text' => $text]);
}
}
Erstellen Sie die Twig-Vorlage (in app/Resources/views/hello-world.html.twig ):
<html><body>{{ text }}</body></html>
Zweig wird den automatisch ersetzen {{ text }} Platzhalter mit dem Wert des text übergibt von der Steuerung. Dadurch wird die folgende HTML-Ausgabe gerendert:
<html><body>Hello World!</body></html>
Zurückgeben einer 404-Seite (nicht gefunden)
Manchmal möchten Sie eine 404-Antwort (nicht gefunden) zurückgeben, da die angeforderte Ressource nicht vorhanden ist. Symfony ermöglicht dies durch NotFoundHttpException einer NotFoundHttpException .
Der Symfony Base Controller macht eine createNotFoundException Methode createNotFoundException , die die Ausnahme für Sie erstellt:
public function indexAction()
{
// retrieve the object from database
$product = ...;
if (!$product) {
throw $this->createNotFoundException('The product does not exist');
}
// continue with the normal flow if no exception is thrown
return $this->render(...);
}
Daten aus dem Request-Objekt verwenden
Wenn Sie auf das Request Objekt zugreifen müssen (z. B. zum Lesen der Abfrageparameter, zum Lesen eines HTTP-Headers oder zum Verarbeiten einer hochgeladenen Datei), können Sie die Anforderung als Methodenargument erhalten, indem Sie ein Argument mit Typhinweis hinzufügen:
use Symfony\Component\HttpFoundation\Request;
public function indexAction(Request $request)
{
$queryParam = $request->query->get('param');
// ...
}
Symfony erkennt den Typhinweis und fügt das Anforderungsargument zum Controller-Aufruf hinzu.