Ricerca…


introduzione

Una rotta è come associare un URL a un'azione (funzione) in una classe Controller. Il seguente argomento si concentrerà sulla creazione di percorsi, passando i parametri alla classe Controller tramite una rotta usando YAML o annotazione.

Osservazioni

È utile vedere cosa è generato dal framework Symfony, questo fornisce strumenti per guardare tutti i percorsi di un'applicazione specifica.

Da Symfony Doc , usa (in una shell):

php bin/console debug:router

Inoltre, puoi vedere tutte le informazioni relative ai percorsi rilevanti nel profiler Framework, nel menu di routing: Symfony Profiler

Routing utilizzando YAML

La configurazione del routing è inclusa nel tuo file app/config/config.yml , di default il file app/config/routing.yml .

Da lì puoi collegare alla tua configurazione di routing in un pacchetto

# app/config/routing.yml

app:
    resource: "@AppBundle/Resources/config/routing.yml"

Potrebbe anche contenere diverse rotte globali dell'applicazione.

Nel tuo bundle puoi configurare, percorsi che hanno due scopi:

  • Corrispondenza con una richiesta, in modo tale che venga richiesta l'azione corretta per la richiesta.
  • Generazione di un URL dal nome e parametri del percorso.

Di seguito è riportata una configurazione di route YAML di esempio:

# 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'"

Il percorso è denominato my_page e, quando richiesto, richiama myPageAction del DefaultController in AppBundle . Ha un parametro, chiamato parameter con un valore predefinito. Il valore è valido solo quando corrisponde alla regex \d+ . Per questa rotta, sono accettati solo i metodi HTTP GET e PUT . La condition è un'espressione nell'esempio in cui la route non corrisponde a meno che l'intestazione User-Agent non corrisponda a firefox. È possibile eseguire qualsiasi logica complessa necessaria nell'espressione sfruttando due variabili che vengono passate nell'espressione: context (RequestContext) e request ( request symfony).

Una rotta generata con il valore del parametro 10 potrebbe essere simile a /application/content/page/10 .

Routing tramite annotazioni

La configurazione del routing è inclusa nel tuo file app/config/config.yml , di default il file app/config/routing.yml .

Da lì puoi collegarti ai controller che hanno una configurazione di routing annotata:

# app/config/routing.yml

app:
    resource: "@AppBundle/Controller"
    type:     annotation

Nel tuo bundle puoi configurare, percorsi che hanno due scopi:

  • Corrispondenza con una richiesta, in modo tale che venga richiesta l'azione corretta per la richiesta.
  • Generazione di un URL dal nome e parametri del percorso.

Di seguito è riportato un esempio di configurazione del percorso annotato:

// 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)
    {
        // ...
    }
}

Il controllore è annotato con un percorso prefisso , in modo tale che qualsiasi percorso configurato in questo controller verrà anteposto utilizzando il prefisso.

Il percorso configurato è denominato my_page e richiama la funzione myPageAction quando richiesto. Ha un parametro, chiamato parameter con un valore predefinito. Il valore è valido solo quando corrisponde alla regex \d+ . Per questa rotta, sono accettati solo i metodi HTTP GET e PUT .

Si noti che il parametro viene iniettato nell'azione come parametro di funzione.

Una rotta generata con il valore del parametro 10 potrebbe essere simile a /application/content/page/10 .

Potenti percorsi di riposo

Tradizionalmente, è possibile utilizzare il routing per mappare una richiesta con il componente di routing che ha gestito i parametri di richiesta e risposta tramite HttpFoundation Component .

Inoltre, è possibile creare un parametro del percorso personalizzato utilizzando FOSRestBundle per estendere le funzionalità predefinite del componente di instradamento.

Questo è utile per creare percorsi REST, un modo davvero utile per specificare come trasferire dati strutturati come XML o file json in una richiesta (e una risposta).

Vedi FOSRestBundle Doc per maggiori informazioni, e specialmente questa annotazione:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow