Nuevo en Symfony 3.4: Prefijar todas las rutas de un controlador
En las aplicaciones Symfony, puedes añadir una anotación @Route
en la clase
del controlador para definir la parte de la URL que es común a todas las acciones
de ese controlador:
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; /** * @Route("/blog") */ class BlogController extends Controller { /** * @Route("/", defaults={"page": "1"}, name="blog_index") * @Route("/pagina/{page}", name="blog_index_paginated") */ public function indexAction($page, $_format) { ... } /** * @Route("/posts/{slug}", name="blog_post") */ public function showAction(Post $post) { ... } }
En este ejemplo, todas las acciones del controlador tienen una URL que empieza
por /blog
, así que en vez de repetirla en cada acción, se define en la anotación
@Route
de la clase. Así, las URL de la acción index
son /blog/
y /blog/pagina/...
,
mientras que la URL de la acción show
es /blog/posts/...
Como se puede ver en este mismo ejemplo, una práctica común al crear este tipo
de controladores es utilizar nombres de rutas que siguen un patrón (blog_index
,
blog_post
, etc.) Así que en Symfony 3.4 hemos mejorado la anotación @Route
para que también permita definir el prefijo común de todas las rutas del controlador.
Para ello, define el prefijo común mediante la propiedad name
de la anotación
@Route
. El siguiente ejemplo es equivalente al anterior:
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; /** * @Route("/blog", name="blog_") */ class BlogController extends Controller { /** * @Route("/", defaults={"page": "1"}, name="index") * @Route("/pagina/{page}", name="index_paginated") */ public function indexAction($page, $_format) { ... } /** * @Route("/posts/{slug}", name="post") */ public function showAction(Post $post) { ... } }
Esta funcionalidad fue creada por Fabien Potencier en el Pull Request #24031.
Fuente: New in Symfony 3.4: Prefix all controller route names
Comentarios
Proyectos Symfony destacados
La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.