【发布时间】:2018-01-29 04:14:48
【问题描述】:
在尝试匹配像 site.com/photos 和 site.com/blog 这样的 url 之后,我想在末尾有一个带有通配符的 url site.com/{username}。我正在使用注释并有两个控制器。
我在这里找到了答案Ordering of routes using annotations
但文件夹结构在版本 4 中有所不同,并且在我使用注释时他们使用 YAML 的答案,所以我不完全理解在哪里放置什么。
视频控制器
/**
* @Route("/videos", name="videos")
*/
public function index()
{
// Show video homepage
}
用户控制器
/**
* @Route("/{username}", name="profile")
*/
public function index()
{
// Hello {username} !
}
按此顺序,site.com/videos 到达用户控制器而不是视频。我是否必须切换到手动将 all URL 结构放入 yaml 格式,或者有没有办法在注释中设置优先级?
到目前为止,我发现的唯一方法是创建一个以字母“Z”开头的控制器,并将动作/路线放在那里,这似乎是最后运行路线。
【问题讨论】:
-
幕后没有什么神奇的,路由catch第一个找到的路径。这个行为是众所周知的github.com/symfony/symfony/issues/18415正如你所说,你必须得到一个线索并重命名你的控制器。这是“肮脏的”和奇怪的,但它就像一个魅力