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