Ricerca…
introduzione
Il routing è il processo di mappatura di un URL a un controller . Symfony ha un potente componente di Routing che ti permette di definire i percorsi.
Il componente Routing supporta numerosi formati di configurazione: annotazioni, YAML, XML e PHP raw.
Parametri
Parametro | Dettagli |
---|---|
nome | Il nome del percorso. Esempio: book_show |
sentiero | Il percorso (potrebbe contenere caratteri jolly). Esempio: /book/{isbn} |
default | Valori predefiniti dei parametri |
Percorsi semplici
Utilizzando YAML:
# app/config/routing.yml
blog_list:
path: /blog
defaults: { _controller: AppBundle:Blog:list }
Utilizzando annotazioni:
// src/AppBundle/Controller/BlogController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class BlogController extends Controller
{
/**
* @Route("/blog", name="blog_list")
*/
public function listAction()
{
// ...
}
}
Una richiesta per l'URL /blog
verrà gestita dal metodo listAction()
del BlogController
all'interno di AppBundle
.
Percorsi con segnaposti
Utilizzando YAML:
# app/config/routing.yml
blog_show:
path: /blog/{slug}
defaults: { _controller: AppBundle:Blog:show }
Utilizzando annotazioni:
// src/AppBundle/Controller/BlogController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class BlogController extends Controller
{
/**
* @Route("/blog/{slug}", name="blog_show")
*/
public function showAction($slug)
{
// ...
}
}
Qualsiasi richiesta con un URL corrispondente /blog/*
sarà gestita dal metodo showAction()
di BlogController
all'interno di AppBundle
. L'azione del controller riceverà il valore del segnaposto come argomento del metodo.
Ad esempio, una richiesta per /blog/my-post
attiverà una chiamata a showAction()
con un argomento $slug
contenente il valore my-post
. Utilizzando tale argomento, l'azione del controller può modificare la risposta in base al valore del segnaposto, ad esempio recuperando il post del blog con lo slug my-post
dal database.
Valori predefiniti per segnaposti
Se vuoi avere un segnaposto che può essere omesso, puoi dargli un valore predefinito:
Utilizzando YAML:
# app/config/routing.yml
blog_list:
path: /blog/{page}
defaults: { _controller: AppBundle:Blog:list, page: 1 }
requirements:
page: '\d+'
Utilizzando annotazioni:
// src/AppBundle/Controller/BlogController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class BlogController extends Controller
{
/**
* @Route("/blog/{page}", name="blog_list", requirements={"page": "\d+"})
*/
public function listAction($page = 1)
{
// ...
}
}
In questo esempio, sia gli URL /blog
e /blog/1
corrisponderanno al percorso blog_list
e saranno gestiti dal metodo listAction()
. Nel caso di /blog
, listAction()
riceverà comunque l'argomento $page
, con il valore predefinito 1
.