路由
编辑本页一个>警告:您正在浏览的文档欧宝体育电话<一个href="//www.oldmanjams.com/releases/2.3">欧宝娱乐app下载地址Symfony 2.3一个>,现已不再维护。
读<一个href="//www.oldmanjams.com/doc/current/routing.html">本页的更新版本一个>用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
你能发现问题吗?注意,两条路由的模式都与如下url相匹配/博客/ *
.Symf欧宝娱乐app下载地址ony路由器将始终选择第一个匹配它找到的路由。换句话说,blog_show
路线从来没有是匹配的。相反,一个URL/博客/我的博客帖子
将匹配第一个路由(博客
)并返回一个无意义的值我的博客帖子
到{页面}
参数。
URL | 路线 | 参数 |
---|---|---|
/博客/ 2 |
博客 |
{页面} =2 |
/博客/我的博客帖子 |
博客 |
{页面} =“我的博客帖子” |
这个问题的答案是添加路由需求.此示例中的路由将完美地工作,如果页面/博客/ {}
路径只有匹配url,其中{页面}
部分是一个整数。幸运的是,可以轻松地为每个参数添加正则表达式需求。例如:
- 注释
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13
/ / src / AppBundle /控制器/ BlogController.php/ /……/ * * *@Route(“/博客/{页面}”,缺省值={“页面”:1},需求={*“页面”:“\ d +" * }) */公共函数indexAction($页面){/ /……}
的\ d +
的值是一个正则表达式{页面}
参数必须为数字(即数字)。的博客
route仍然会匹配URL,比如/博客/ 2
(因为2是一个数字),但它将不再匹配一个URL/博客/我的博客帖子
(因为我的博客帖子
是不一个数字)。
结果,一个URL像/博客/我的博客帖子
现在将正确匹配blog_show
路线。
URL | 路线 | 参数 |
---|---|---|
/博客/ 2 |
博客 |
{页面} =2 |
/博客/我的博客帖子 |
blog_show |
{蛞蝓} =我的博客帖子 |
/博客/ 2-my-blog-post |
blog_show |
{蛞蝓} =2-my-blog-post |
由于参数要求是正则表达式,因此每个要求的复杂性和灵活性完全取决于您。假设你的应用程序的主页有两种不同的语言,基于URL:
- 注释
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14
/ / src / AppBundle /控制器/ MainController.php/ /……类MainController扩展控制器{/ * * *@Route(“/ {_locale}”,默认={“_locale”:“en”},需求={*“_locale”:“en | fr”*})* /公共函数homepageAction($_locale){}}
对于传入的请求,{_locale}
URL的一部分与正则表达式匹配(en | fr)
.
路径 | 参数 |
---|---|
/ |
{_locale} =“en” |
/ en |
{_locale} =“en” |
/ fr |
{_locale} =“fr” |
/ es |
不符合这条路线 |
提示
路由需求还可以包括容器参数,如中所述<一个href="//www.oldmanjams.com/doc/2.3/cookbook/routing/service_container_parameters.html" class="reference internal">这篇文章一个>.当正则表达式非常复杂并在应用程序中重复使用时,这就很方便了。