@Route 和 @Method
在当前的 Symfony 应用中,不再建议使用此扩展包。此扩展包提供的所有注解现在都内置在 Symfony 中,作为 PHP 属性。查看 Symfony 属性的完整列表。
自 5.2 版本起,SensioFrameworkExtraBundle 的路由注解已被弃用,因为它们现在是 Symfony 的核心功能。
如何更新您的应用
@Route
注解
Symfony @Route
注解与 SensioFrameworkExtraBundle 注解类似,因此您只需更新注解类命名空间
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()
{
// ...
}
}
或者,可以通过 PHP 8 属性来完成
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()
{
// ...
}
}
主要区别在于 Symfony 的注解不再定义 service
选项,该选项用于通过从容器中获取给定的服务来实例化控制器。在现代 Symfony 应用中,所有 控制器默认都是服务,并且它们的服务 ID 是其完全限定的类名,因此不再需要此选项。
@Method
注解
SensioFrameworkExtraBundle 中的 @Method
注解已被移除。取而代之的是,Symfony @Route
注解定义了一个 methods
选项来限制路由的 HTTP 方法
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)
{
// ...
}
}
或者,可以通过 PHP 8 属性来完成
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)
{
// ...
}
}
阅读 Symfony 文档中关于 路由的章节,以了解有关这些注解和其他可用注解的所有信息。
这项工作,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。