Php 路由命令symfony 4

Php 路由命令symfony 4,php,symfony,Php,Symfony,我希望在尝试匹配url后,在site.com/{username}的末尾有一个通配符的url,如site.com/photos和site.com/blog。我使用注释,有两个控制器 我在这里找到了答案 但是第4版中的文件夹结构不同,在回答中,当我使用注释时,他们使用的是YAML,所以我不完全理解在哪里放置什么 视频控制器 /** * @Route("/videos", name="videos") */ public function index()

我希望在尝试匹配url后,在
site.com/{username}
的末尾有一个通配符的url,如
site.com/photos
site.com/blog
。我使用注释,有两个控制器

我在这里找到了答案

但是第4版中的文件夹结构不同,在回答中,当我使用注释时,他们使用的是YAML,所以我不完全理解在哪里放置什么

视频控制器

    /**
     * @Route("/videos", name="videos")
     */
    public function index()
    {
      // Show video homepage
    }
    /**
     * @Route("/{username}", name="profile")
     */
    public function index()
    {
        // Hello {username} !
    }
用户控制器

    /**
     * @Route("/videos", name="videos")
     */
    public function index()
    {
      // Show video homepage
    }
    /**
     * @Route("/{username}", name="profile")
     */
    public function index()
    {
        // Hello {username} !
    }
按此顺序,
site.com/videos
到达用户控制器,而不是视频。我是否必须切换到手动将所有URL结构置于yaml格式,还是有办法在注释中设置优先级


到目前为止,我找到的唯一方法是创建一个以字母“Z”开头的控制器,并将操作/路由放在其中,似乎最后运行路由。

您必须使用
yml
/
xml
定义路由,才能完全配置它们的顺序。
如果确实要使用注释,可以添加前缀,如
user-

/**
 * @Route("/user-{username}", name="profile")
 */
public function index()
{
    // Hello {username} !
}

你所联系的问题实际上非常相关。你问的和另一个人一样:

但是,如果将路由定义为控制器中的注释,如何实现这一点?在这种情况下,有没有办法指定该路线的顺序

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

controllers:
    resource: ../../src/Controller/
    type: annotation
您可以用以下内容替换上述YAML–请注意,订单确实很重要:

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

User:
    resource: App\Controller\UserController
    type: annotation

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

幕后没有魔法,路由捕获找到的第一条路径。这种行为是众所周知的,因为你说你必须得到一个线索,并重命名你的控制器。它是“脏的”和奇怪的,但它像一个charm一样工作,这意味着每个控制器现在都需要在
config/routes.yaml
right?@Link14中声明,我已经有一段时间没有与Symfony合作了,但我想是这样。通过从
config/routes.yaml
中省略控制器并测试控制器的路由是否工作,应该很容易进行测试。