路由
编辑该页面一个>警告:你浏览的文档欧宝体育电话<一个href=”//www.oldmanjams.com/releases/2.0">欧宝娱乐app下载地址Symfony 2.0一个>,不再维护。
读<一个href=”//www.oldmanjams.com/doc/current/routing.html">这个页面的更新版本一个>Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
你能发现这个问题吗?注意两路线模式匹配的url/博客/ *
。Symf欧宝娱乐app下载地址ony路由器总是选择第一个找到匹配的路线。换句话说,blog_show
路线从来没有是匹配的。相反,一个URL/博客/我的博客帖子
将匹配第一个路线(博客
),返回一个没有意义的价值我的博客帖子
到{页面}
参数。
URL | 路线 | 参数 |
---|---|---|
/博客/ 2 | 博客 | {页面}= 2 |
/博客/我的博客帖子 | 博客 | {页面}=我的博客帖子 |
这个问题的答案是添加路线需求。本例中的路线将工作完美的如果页面/博客/ {}
模式只有匹配的url的地方{页面}
部分是一个整数。幸运的是,可以很轻松地添加正则表达式要求为每个参数。例如:
- YAML
- XML
- PHP
1 2 3 4 5
博客:模式:页面/博客/ {}默认值:{_controller:AcmeBlogBundle:博客:指数,页面:1}要求:页面:\ d +
的\ d +
要求是一个正则表达式表示的值{页面}
参数必须是一个数字(即数量)。的博客
路线仍将匹配一个URL/博客/ 2
(因为2是一个数字),但它将不再匹配一个URL/博客/我的博客帖子
(因为我的博客帖子
是不一个数字)。
因此,一个URL/博客/我的博客帖子
现在将正确地匹配blog_show
路线。
URL | 路线 | 参数 |
---|---|---|
/博客/ 2 | 博客 | {页面}= 2 |
/博客/我的博客帖子 | blog_show | {蛞蝓}=我的博客帖子 |
自正则表达式参数要求,每个需求的复杂性和灵活性是完全取决于你。假设您的应用程序的主页上有两种不同的语言,基于URL:
- YAML
- XML
- PHP
1 2 3 4 5
主页:模式:/{文化}默认值:{_controller:AcmeDemoBundle:主要:主页,文化:在}要求:文化:在| fr
为传入请求{文化}
部分的URL匹配正则表达式(en | fr)
。
/ | {文化}= en |
/ en | {文化}= en |
/ fr | {文化}= fr |
/ es | 这条路不匹配 |
尽管这两个航线有相同的模式(/联系
),第一个将匹配只能请求路由和第二只匹配POST请求。这意味着您可以通过相同的显示形式和提交表单的URL,而使用不同的控制器的两个动作。
请注意
如果没有_method
指定的要求,将匹配的路线所有方法。
像其他要求,_method
需求被解析为一个正则表达式。匹配得到
或帖子
请求,您可以使用获得|职位
。
正如您所看到的,这条路如果只会匹配{文化}
URL的一部分在
或fr
如果{一}
是一个数字。这条路还展示了如何使用占位符之间的一个点,而不是削减。的url匹配这条路线的样子:
/文章/ en / 2010 /我的帖子
/ / fr / 2010 / my-post.rss文章
/ / en / 2013 / my-latest-post.html文章