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

Publicada el

7 de septiembre de 2017

Etiquetas

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.