如何让一个“/”字符在一个路由参数
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.2,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
如何让一个“/”字符在一个路由参数
有时,你需要撰写url参数可以包含一个斜杠/
。例如,考虑一下/分享/{牌}
路线。如果令牌
包含一个值/
性格这条路线不匹配。这是因为Symfony路线部分之欧宝娱乐app下载地址间使用这个字符作为分隔符。
本文解释了如何修改路由定义占位符可以包含的/
字符。
配置路由
默认情况下,Symfony路由组欧宝娱乐app下载地址件要求的参数匹配正则表达式如下:[^ /]+
。这意味着所有的字符都允许的除外/
。
您必须显式地允许/
是占位符的一部分通过指定一个更宽松的正则表达式:
- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12
使用欧宝娱乐app下载地址\组件\路由\注释\路线;类DefaultController{/ * * *@Route(“/分享/{牌}”,名字=“共享”,要求={“令牌”=”。+ "})* /公共函数分享(美元令牌){/ /……}}
1 2 3 4 5 6
#配置/ routes.yaml分享:路径:/分享/{牌}控制器:控制器应用\ \ DefaultController::分享要求:令牌:。+< /span>
1 2 3 4 5 6 7 8 9 10 11
< !——配置/路线。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><路线xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing //www.oldmanjams.com/schema/routing/routing-1.0.xsd”><路线id=“共享”路径=“/分享/{牌}”控制器=“应用程序控制器\ \ DefaultController:分享”><要求关键=“令牌”>。+< /要求>< /路线>< /路线>
1 2 3 4 5 6 7 8 9 10 11 12
/ /配置/ routes.php使用应用程序\控制器\DefaultController;使用欧宝娱乐app下载地址\组件\路由\加载程序\配置器\RoutingConfigurator;返回函数(RoutingConfigurator美元路线){美元路线- >add (“分享”,“/分享/{牌}”)- >控制器([DefaultController::类,“分享”])- >需求([“令牌”= >“+”。]);};
就是这样!现在,{牌}
参数可以包含/
的性格。
请注意
如果包括特殊的路线{_format}
占位符,你不应该使用。+< /code>要求的参数允许斜杠。例如,如果模式
/分享/{牌}{_format}。
和{牌}
允许任何字符/ / foo / bar.json分享
URL将考虑foo / bar.json
令牌和格式将是空的。这可以通过替换解决。+< /code>要求的
[^]+
允许点以外的任何字符。
请注意
如果路线定义了一些占位符应用这个宽容的正则表达式,结果不会是预期。例如,如果路由定义/分享/ {path} /{牌}
和两个路径
和令牌
接受/
,然后路径
将包含其内容和令牌令牌
将是空的。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。