Suche…
Einführung
Eine Route ist wie das Zuordnen einer URL zu einer Aktion (Funktion) in einer Controller-Klasse. Das folgende Thema konzentriert sich auf das Erstellen von Routen und die Übergabe von Parametern an die Controller-Klasse über eine Route mithilfe von YAML oder Annotation.
Bemerkungen
Es ist hilfreich zu sehen, was von Symfony Framework generiert wird. Dieses Tool bietet Tools zum Überwachen aller Routen einer bestimmten Anwendung.
Verwenden Sie in Symfony Doc (in einer Shell):
php bin/console debug:router
Sie können auch alle relevanten Routeninformationen im Framework-Profiler im Routing-Menü anzeigen:
Routing mit YAML
Die Routing-Konfiguration ist in Ihrer app/config/config.yml
Datei enthalten, standardmäßig die app/config/routing.yml
Datei.
Von dort aus können Sie in einem Bundle eine Verknüpfung zu Ihrer eigenen Routing-Konfiguration herstellen
# app/config/routing.yml
app:
resource: "@AppBundle/Resources/config/routing.yml"
Es kann auch mehrere globale Anwendungsrouten enthalten.
In Ihrem eigenen Paket können Sie Routen konfigurieren, die zwei Zwecken dienen:
- Abgleich mit einer Anfrage, sodass die richtige Aktion für die Anfrage aufgerufen wird.
- URL aus den Namen und Routenparametern generieren.
Nachfolgend finden Sie eine Beispielkonfiguration für YAML-Routen:
# src/AppBundle/Resources/config/routing.yml
my_page:
path: /application/content/page/{parameter}
defaults:
_controller: AppBundle:Default:myPage
parameter: 42
requirements:
parameter: '\d+'
methods: [ GET, PUT ]
condition: "request.headers.get('User-Agent') matches '/firefox/i'"
Die Route heißt my_page
und ruft bei Aufforderung die myPageAction
des DefaultController
im AppBundle
. Es hat einen Parameter namens parameter
mit einem Standardwert. Der Wert ist nur gültig, wenn er mit dem Regex \d+
übereinstimmt. Für diese Route werden nur die HTTP-Methoden GET
und PUT
akzeptiert. Die condition
ist ein Ausdruck in dem Beispiel, in dem die Route nicht übereinstimmt, sofern der User-Agent-Header nicht mit firefox übereinstimmt. Sie können jede komplexe Logik ausführen, die Sie im Ausdruck benötigen, indem Sie zwei Variablen nutzen, die an den Ausdruck übergeben werden: context
(RequestContext) und request
(Symfony Request).
Eine generierte Route mit dem Parameterwert 10 kann wie /application/content/page/10
aussehen.
Routing mit Anmerkungen
Die Routing-Konfiguration ist in Ihrer app/config/config.yml
Datei enthalten, standardmäßig die app/config/routing.yml
Datei.
Von dort aus können Sie eine Verbindung zu den Controllern herstellen, die die Routing-Konfiguration mit Anmerkungen versehen haben:
# app/config/routing.yml
app:
resource: "@AppBundle/Controller"
type: annotation
In Ihrem eigenen Paket können Sie Routen konfigurieren, die zwei Zwecken dienen:
- Abgleich mit einer Anfrage, sodass die richtige Aktion für die Anfrage aufgerufen wird.
- URL aus den Namen und Routenparametern generieren.
Nachfolgend finden Sie eine kommentierte Routenkonfiguration:
// src/AppBundle/Controller/DefaultController.php
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
/**
* @Route("/application")
*/
class DefaultController extends Controller {
/**
* @Route("/content/page/{parameter}",
* name="my_page",
* requirements={"parameter" = "\d+"},
* defaults={"parameter" = 42})
* @Method({"GET", "PUT"})
*/
public function myPageAction($parameter)
{
// ...
}
}
Der Controller wird mit einer Präfixroute kommentiert, sodass jede konfigurierte Route in diesem Controller mit dem Präfix vorangestellt wird.
Die konfigurierte Route heißt my_page
und ruft bei myPageAction
Funktion myPageAction
. Es hat einen Parameter namens parameter
mit einem Standardwert. Der Wert ist nur gültig, wenn er mit dem Regex \d+
übereinstimmt. Für diese Route werden nur die HTTP-Methoden GET
und PUT
akzeptiert.
Beachten Sie, dass der Parameter als Funktionsparameter in die Aktion eingefügt wird.
Eine generierte Route mit dem Parameterwert 10 kann wie /application/content/page/10
aussehen.
Leistungsfähige Restwege
Normalerweise können Sie Routing verwenden, um eine Anforderung der Routing-Komponente zuzuordnen, die die Anforderungs- und Antwortparameter von der HttpFoundation-Komponente verarbeitet hat .
Darüber hinaus kann ein benutzerdefinierter Routenparameter mithilfe von FOSRestBundle erstellt werden, um die Standardfunktionalitäten der Routingkomponente zu erweitern.
Dies ist nützlich zum Erstellen von REST-Routen. Dies ist wirklich nützlich, um anzugeben, wie strukturierte Daten wie XML- oder Json-Dateien in einer Anforderung (und einer Antwort) übertragen werden.
Weitere Informationen und insbesondere diese Anmerkung finden Sie in FOSRestBundle Doc.
use FOS\RestBundle\Controller\Annotations\FileParam;
/**
* @FileParam(
* name="",
* key=null,
* requirements={},
* default=null,
* description="",
* strict=true,
* nullable=false,
* image=false
* )
*/