Sök…
Introduktion
En rutt är som att kartlägga en URL till en åtgärd (funktion) i en kontroller-klass. Följande ämne kommer att fokusera på att skapa rutter, överföra parametrar till Controller-klassen via en rutt antingen med YAML eller annotation.
Anmärkningar
Det är användbart att se vad som genereras av Symfony-ramverket, det här ger verktyg för att titta på alla rutter för en specifik applikation.
Använd (i ett skal) från Symfony Doc :
php bin/console debug:router
Du kan också se alla relevanta ruttinformation i Framework-profilen på routingsmenyn:
Routing med YAML
Routningskonfigurationen ingår i din app/config/config.yml
fil, som standard app/config/routing.yml
filen.
Därifrån kan du länka till din egen routingkonfiguration i ett paket
# app/config/routing.yml
app:
resource: "@AppBundle/Resources/config/routing.yml"
Det kan också innehålla flera applikations globala rutter.
I ditt eget paket kan du konfigurera rutter som tjänar två syften:
- Matchar mot en begäran, så att rätt åtgärd krävs för begäran.
- Genererar en URL från namn- och ruttparametrarna.
Nedan visas ett exempel på YAML-ruttkonfiguration:
# 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'"
Rutten heter my_page
och anropar myPageAction
för DefaultController
i AppBundle
när du begär det. Den har en parameter, kallad parameter
med ett standardvärde. Värdet är bara giltigt när det matchar regex \d+
. För denna rutt accepteras endast HTTP-metoderna GET
och PUT
. condition
är ett uttryck i exemplet som rutten inte matchar såvida inte rubriken User-Agent matchar Firefox. Du kan göra vilken komplex logik du behöver i uttrycket genom att använda två variabler som skickas in i uttrycket: context
(RequestContext) och request
(Symfony Request).
En genererad rutt med parametervärdet 10 kan se ut som /application/content/page/10
.
Routing med hjälp av kommentarer
Routningskonfigurationen ingår i din app/config/config.yml
fil, som standard app/config/routing.yml
filen.
Därifrån kan du länka till de kontroller som har kommenterat routingkonfiguration:
# app/config/routing.yml
app:
resource: "@AppBundle/Controller"
type: annotation
I ditt eget paket kan du konfigurera rutter som tjänar två syften:
- Matchar mot en begäran, så att rätt åtgärd krävs för begäran.
- Genererar en URL från namn- och ruttparametrarna.
Nedan visas ett exempel på kommenterad ruttkonfiguration:
// 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)
{
// ...
}
}
Styrenheten kommenteras med ett prefixväg , så att alla konfigurerade rutter i denna styrenhet kommer att förberedas med prefixet.
Den konfigurerade rutten heter my_page
och myPageAction
funktionen myPageAction
begäran. Den har en parameter, kallad parameter
med ett standardvärde. Värdet är bara giltigt när det matchar regex \d+
. För denna rutt accepteras endast HTTP-metoderna GET
och PUT
.
Observera att parametern injiceras i åtgärden som en funktionsparameter.
En genererad rutt med parametervärdet 10 kan se ut som /application/content/page/10
.
Kraftfulla viloleder
Traditionellt kan du använda routing för att kartlägga en begäran med Routing Component som hanterade begäran och svarparametrar av HttpFoundation Component .
Dessutom kan en anpassad ruttparameter skapas med FOSRestBundle för att utöka standardfunktionerna för routingkomponenten.
Detta är användbart för att skapa REST-rutter, en riktigt användbar för att ange hur man ska överföra strukturerade data som XML eller json-fil i en begäran (och ett svar).
Se FOSRestBundle Doc för mer information, och särskilt denna kommentar:
use FOS\RestBundle\Controller\Annotations\FileParam;
/**
* @FileParam(
* name="",
* key=null,
* requirements={},
* default=null,
* description="",
* strict=true,
* nullable=false,
* image=false
* )
*/