如何根据主机匹配路由
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.6,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
如何根据主机匹配路由
也可以在HTTP上进行匹配宿主传入请求的。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8
mobile_homepage:路径:/主持人:m.example.com默认值:{_controller:AcmeDemoBundle:主要:mobileHomepage}主页:路径:/默认值:{_controller:AcmeDemoBundle:主要:主页}
12 3 4 5 6 7 8 9 10 11 12 13 14
<??> . 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=“mobile_homepage”路径=“/”宿主=“m.example.com”><默认的关键=“_controller”>AcmeDemoBundle:主要:mobileHomepage默认的>路线><路线id=“主页”路径=“/”><默认的关键=“_controller”>AcmeDemoBundle:主要:主页默认的>路线>路线>
12 3 4 5 6 7 8 9 10 11 12 13
使用欧宝娱乐app下载地址\组件\路由\RouteCollection;使用欧宝娱乐app下载地址\组件\路由\路线;$集合=新RouteCollection ();$集合->add (“mobile_homepage”,新路线(' / ',数组(“_controller”= >“AcmeDemoBundle:主要:mobileHomepage”),数组(),数组(),“m.example.com”));$集合->add (“主页”,新路线(' / ',数组(“_controller”= >“AcmeDemoBundle:主要:主页”)));返回$集合;
两条路由匹配相同的路径/
,但是只有当主机为时,第一个才会匹配m.example.com
.
使用占位符
host选项使用与路径匹配系统相同的语法。这意味着你可以在主机名中使用占位符:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8
projects_homepage:路径:/主持人:“.example.com {project_name}”默认值:{_controller:AcmeDemoBundle:主要:mobileHomepage}主页:路径:/默认值:{_controller:AcmeDemoBundle:主要:主页}
12 3 4 5 6 7 8 9 10 11 12 13 14
<??> . 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=“projects_homepage”路径=“/”宿主=“.example.com {project_name}”><默认的关键=“_controller”>AcmeDemoBundle:主要:mobileHomepage默认的>路线><路线id=“主页”路径=“/”><默认的关键=“_controller”>AcmeDemoBundle:主要:主页默认的>路线>路线>
12 3 4 5 6 7 8 9 10 11 12 13
使用欧宝娱乐app下载地址\组件\路由\RouteCollection;使用欧宝娱乐app下载地址\组件\路由\路线;$集合=新RouteCollection ();$集合->add (“project_homepage”,新路线(' / ',数组(“_controller”= >“AcmeDemoBundle:主要:mobileHomepage”),数组(),数组(),“.example.com {project_name}”));$集合->add (“主页”,新路线(' / ',数组(“_controller”= >“AcmeDemoBundle:主要:主页”)));返回$集合;
您还可以为这些占位符设置需求和默认选项。例如,如果您希望两者都匹配m.example.com
而且mobile.example.com
,你可以用这个:
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12
mobile_homepage:路径:/主持人:“.example.com{子域名}”默认值:_controller:AcmeDemoBundle:主要:mobileHomepage子域名:米要求:子域名:m |移动主页:路径:/默认值:{_controller:AcmeDemoBundle:主要:主页}
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<??> . 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=“mobile_homepage”路径=“/”宿主=“.example.com{子域名}”><默认的关键=“_controller”>AcmeDemoBundle:主要:mobileHomepage默认的><默认的关键=“子域名”>米默认的><要求关键=“子域名”>m |移动要求>路线><路线id=“主页”路径=“/”><默认的关键=“_controller”>AcmeDemoBundle:主要:主页默认的>路线>路线>
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用欧宝娱乐app下载地址\组件\路由\RouteCollection;使用欧宝娱乐app下载地址\组件\路由\路线;$集合=新RouteCollection ();$集合->add (“mobile_homepage”,新路线(' / ',数组(“_controller”= >“AcmeDemoBundle:主要:mobileHomepage”,“子域名”= >“米”),数组(“子域名”= >“m |移动”),数组(),“.example.com{子域名}”));$集合->add (“主页”,新路线(' / ',数组(“_controller”= >“AcmeDemoBundle:主要:主页”)));返回$集合;
提示
如果你不想硬编码主机名,你也可以使用服务参数:
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12
mobile_homepage:路径:/主持人:“米{域}”。默认值:_controller:AcmeDemoBundle:主要:mobileHomepage域:域“% %”要求:域:域“% %”主页:路径:/默认值:{_controller:AcmeDemoBundle:主要:主页}
12 3 4 5 6 7 8 9 10 11 12 13 14 15
<??> . 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=“mobile_homepage”路径=“/”宿主=“米{域}”。><默认的关键=“_controller”>AcmeDemoBundle:主要:mobileHomepage默认的><默认的关键=“域”>%域%默认的><要求关键=“域”>%域%要求>路线><路线id=“主页”路径=“/”><默认的关键=“_controller”>AcmeDemoBundle:主要:主页默认的>路线>路线>
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用欧宝娱乐app下载地址\组件\路由\RouteCollection;使用欧宝娱乐app下载地址\组件\路由\路线;$集合=新RouteCollection ();$集合->add (“mobile_homepage”,新路线(' / ',数组(“_controller”= >“AcmeDemoBundle:主要:mobileHomepage”,“域”= >“%域%”),数组(“域”= >“%域%”),数组(),“米{域}’。));$集合->add (“主页”,新路线(' / ',数组(“_controller”= >“AcmeDemoBundle:主要:主页”)));返回$集合;
提示
属性的默认选项域
占位符,否则每次使用路由生成URL时都需要包含一个域值。
引入路由的主机匹配
还可以对引入的路由设置host选项:
- YAML
- XML
- PHP
1 2 3
acme_hello:资源:“@AcmeHelloBundle /资源/ config / routing.yml”主持人:“hello.example.com”
1 2 3 4 5 6 7
<??> . 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”><进口资源=“@AcmeHelloBundle /资源/ config /利用”宿主=“hello.example.com”/>路线>
1 2 3 4 5 6
使用欧宝娱乐app下载地址\组件\路由\RouteCollection;$集合=新RouteCollection ();$集合->addCollection ($加载程序->导入(“@AcmeHelloBundle /资源/ config / routing.php”),'',数组(),数组(),数组(),“hello.example.com”);返回$集合;
主机hello.example.com
将在从新路由资源加载的每个路由上设置。
测试你的控制器
如果您希望在功能测试中通过url匹配,则需要在请求对象上设置Host HTTP标头。
1 2 3 4 5 6 7
$履带=$客户端->请求(“得到”,' /主页',数组(),数组(),数组(“HTTP_HOST”= >“m”。.$客户端->getContainer ()->getParameter (“域”)));
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。