跳到内容

@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 许可协议获得许可。
目录
    版本