Buscar..
Introducción
El enrutamiento es el proceso de asignar una URL a un controlador . Symfony tiene un potente componente de enrutamiento que te permite definir rutas.
El componente de enrutamiento admite varios formatos de configuración: anotaciones, YAML, XML y PHP en bruto.
Parámetros
Parámetro | Detalles |
---|---|
nombre | El nombre de la ruta. Ejemplo: book_show |
camino | La ruta (puede contener comodines). Ejemplo: /book/{isbn} |
por defecto | Valores por defecto de los parámetros. |
Rutas sencillas
Usando YAML:
# app/config/routing.yml
blog_list:
path: /blog
defaults: { _controller: AppBundle:Blog:list }
Uso de anotaciones:
// 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 solicitud para la URL de /blog
será manejada por el método listAction()
del BlogController
dentro de AppBundle
.
Rutas con marcadores de posición.
Usando YAML:
# app/config/routing.yml
blog_show:
path: /blog/{slug}
defaults: { _controller: AppBundle:Blog:show }
Uso de anotaciones:
// 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)
{
// ...
}
}
Cualquier solicitud con una URL coincidente /blog/*
será manejada por el método showAction()
del BlogController
dentro de AppBundle
. La acción del controlador recibirá el valor del marcador de posición como un argumento de método.
Por ejemplo, una solicitud de /blog/my-post
activará una llamada a showAction()
con un argumento $slug
contiene el valor my-post
. Usando ese argumento, la acción del controlador puede cambiar la respuesta dependiendo del valor del marcador de posición, por ejemplo, recuperando la publicación del blog con el slug my-post
de la base de datos.
Valores por defecto para marcadores de posición
Si desea tener un marcador de posición que se puede omitir, puede asignarle un valor predeterminado:
Usando YAML:
# app/config/routing.yml
blog_list:
path: /blog/{page}
defaults: { _controller: AppBundle:Blog:list, page: 1 }
requirements:
page: '\d+'
Uso de anotaciones:
// 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)
{
// ...
}
}
En este ejemplo, las URL /blog
y /blog/1
coincidirán con la ruta blog_list
y serán manejadas por el método listAction()
. En el caso de /blog
, listAction()
aún recibirá el argumento $page
, con el valor predeterminado 1
.