路由顺序 symfony 4

Dar*_*ius 3 php symfony

site.com/{username}在尝试匹配 url 的 likesite.com/photos和后,我想在末尾有一个带通配符的url site.com/blog。我正在使用注释并有两个控制器。

我在这里找到了答案使用注释对路线进行排序

但是文件夹结构在第 4 版中有所不同,并且在我使用注释时他们使用的是 YAML,所以我不完全明白该放什么。

视频控制器

    /**
     * @Route("/videos", name="videos")
     */
    public function index()
    {
      // Show video homepage
    }
Run Code Online (Sandbox Code Playgroud)

用户控制器

    /**
     * @Route("/{username}", name="profile")
     */
    public function index()
    {
        // Hello {username} !
    }
Run Code Online (Sandbox Code Playgroud)

按照这个顺序,site.com/videos到达用户控制器而不是视频。我是否必须切换到手动将所有URL 结构置于 yaml 格式中,或者有没有办法在注释中设置优先级?

到目前为止,我发现的唯一方法是创建一个以字母“Z”开头的控制器,并将动作/路线放在那里,这似乎是最后运行路线。

mar*_*ias 5

您链接的问题实际上非常相关。你和另一个人问的一样:

但是,如果您将路由定义为控制器中的注释,您怎么能做到这一点呢?在这种情况下,有没有办法指定这条路线的顺序?

在 Symfony 4 中,你config/routes.yaml可能是空的,config/routes/annotations.yaml可能是这样的:

controllers:
    resource: ../../src/Controller/
    type: annotation
Run Code Online (Sandbox Code Playgroud)

你可以用这个替换上面的 YAML——注意顺序很重要:

Video:
    resource: App\Controller\VideoController
    type: annotation

User:
    resource: App\Controller\UserController
    type: annotation
Run Code Online (Sandbox Code Playgroud)

然后首先site.com/videos到达视频控制器。