@Route and @Method
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.