Symfony News

New in Symfony 3.4: Prefix all controller route names

Fabien Potencier

Contributed by
Fabien Potencier
in #24031.

In Symfony applications, the class of a controller can define the @Route annotation to set a common prefix for the URLs used by the action methods:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

/**
 * @Route("/blog")
 */
class BlogController extends Controller
{
    /**
     * @Route("/", defaults={"page": "1"}, name="blog_index")
     * @Route("/page/{page}", name="blog_index_paginated")
     */
    public function indexAction($page, $_format) { ... }

    /**
     * @Route("/posts/{slug}", name="blog_post")
     */
    public function showAction(Post $post) { ... }
}

In this example, the URL of the index action will be /blog/ and /blog/page/... and the URL of the show action will be /blog/posts/....

As you can see in this example, it's also a common practice to use a consistent naming for the routes of a single controller (blog_index, blog_post, etc.) That's why in Symfony 3.4, we improved the @Route() annotation to also allow defining the common part of the controller route names.

Add a name property to the @Route annotation of the controller class and that will be considered the prefix of all route names. The following is equivalent to the previous example:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

/**
 * @Route("/blog", name="blog_")
 */
class BlogController extends Controller
{
    /**
     * @Route("/", defaults={"page": "1"}, name="index")
     * @Route("/page/{page}", name="index_paginated")
     */
    public function indexAction($page, $_format) { ... }

    /**
     * @Route("/posts/{slug}", name="post")
     */
    public function showAction(Post $post) { ... }
}

Be trained by Symfony experts - 2017-09-11 Paris - 2017-09-11 Paris - 2017-09-13 Paris


About us

What a Symfony developer should know about the framework: News, Jobs, Tweets, Events, Videos,...

Resources

Find us on Twitter

Find us on Facebook