Php 路由命令symfony 4
我希望在尝试匹配url后,在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()
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
中省略控制器并测试控制器的路由是否工作,应该很容易进行测试。