Skip to content

@Route and @Method

Edit this page
It's no longer recommended to use this bundle in current Symfony applications. All the annotations provided by this bundle are now built-in in Symfony as PHP attributes. Check out the full list of Symfony attributes.

Routing annotations of the SensioFrameworkExtraBundle are deprecated since version 5.2 because they are now a core feature of Symfony.

How to Update your Applications

@Route Annotation

The Symfony @Route annotation is similar to the SensioFrameworkExtraBundle annotation, so you only have to update the annotation class namespace:

1
2
3
4
5
6
7
8
9
10
11
12
13
-use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
+use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends Controller
{
    /**
     * @Route("/")
     */
    public function index()
    {
        // ...
    }
}

Alternatively, it can be done with the help of the PHP 8 attribute:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
+use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends Controller
{
-    /**
-     * @Route("/")
-     */
+    #[Route('/')]
    public function index()
    {
        // ...
    }
}

The main difference is that Symfony's annotation no longer defines the service option, which was used to instantiate the controller by fetching the given service from the container. In modern Symfony applications, all controllers are services by default and their service IDs are their fully- qualified class names, so this option is no longer needed.

@Method Annotation

The @Method annotation from SensioFrameworkExtraBundle has been removed. Instead, the Symfony @Route annotation defines a methods option to restrict the HTTP methods of the route:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
-use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
+use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends Controller
{
    /**
-      * @Route("/show/{id}")
-      * @Method({"GET", "HEAD"})
+      * @Route("/show/{id}", methods={"GET","HEAD"})
     */
    public function show($id)
    {
        // ...
    }
}

Alternatively, it can be done with the help of the PHP 8 attribute:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
-use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
+use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends Controller
{
-    /**
-     * @Route("/show/{id}")
-     * @Method({"GET", "HEAD"})
-     */
+    #[Route('/show/{id}', methods: ['GET','HEAD'])]
    public function show($id)
    {
        // ...
    }
}

Read the chapter about Routing in the Symfony Documentation to learn everything about these and the other annotations available.

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.
TOC
    Version