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: Symfony Profiler

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
 * )
 */


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow