如何匹配基于主机的路由
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.2,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
如何匹配基于主机的路由
你也可以匹配任何路由HTTP主机传入的请求。
- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\路由\注释\路线;类MainController扩展AbstractController{/ * * *@Route(" name =“mobile_homepage”,主机= " m.example.com ") * /公共函数mobileHomepage(){/ /……}/ * * *@Route(" name = "主页")* /公共函数主页(){/ /……}}
1 2 3 4 5 6 7 8 9
#配置/ routes.yamlmobile_homepage:路径:/主持人:m.example.com控制器:应用程序控制器\ \ MainController:: mobileHomepage主页:路径:/控制器:控制器应用\ \ MainController::主页
1 2 3 4 5 6 7 8 9 10 11 12 13 14
< !——配置/路线。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=“mobile_homepage”路径=“/”主机=“m.example.com”控制器=“应用程序控制器\ \ MainController: mobileHomepage”/ ><路线id=“主页”路径=“/”控制器=“应用程序控制器\ \ MainController:主页”/ >< /路线>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ /配置/ routes.php使用应用程序\控制器\MainController;使用欧宝娱乐app下载地址\组件\路由\加载程序\配置器\RoutingConfigurator;返回函数(RoutingConfigurator美元路线){美元路线- >add (“mobile_homepage”,' / ')- >控制器([MainController::类,“mobileHomepage”])- >主机(“m.example.com”);美元路线- >add (“主页”,' / ')- >控制器([MainController::类,“主页”]);};返回美元路线;
两个路线匹配相同的路径,/
。然而,第一个只会匹配如果主人m.example.com
。
使用占位符
主机选择使用相同的语法匹配系统的必经之路。这意味着您可以在您的主机名中使用占位符:
- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\路由\注释\路线;类MainController扩展AbstractController{/ * * *@Route(" name =“projects_homepage”,主机= " .example.com{项目}")* /公共函数projectsHomepage(字符串美元项目){/ /……}/ * * *@Route(" name = "主页")* /公共函数主页(){/ /……}}
1 2 3 4 5 6 7 8 9
#配置/ routes.yamlprojects_homepage:路径:/主持人:.example.com项目“{}”控制器:应用程序控制器\ \ MainController:: projectsHomepage主页:路径:/控制器:控制器应用\ \ MainController::主页
1 2 3 4 5 6 7 8 9 10 11 12 13 14
< !——配置/路线。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=“projects_homepage”路径=“/”主机=.example.com项目“{}”控制器=“应用程序控制器\ \ MainController: projectsHomepage”/ ><路线id=“主页”路径=“/”控制器=“应用程序控制器\ \ MainController:主页”/ >< /路线>
1 2 3 4 5 6 7 8 9 10 11 12 13
/ /配置/ routes.php使用应用程序\控制器\MainController;使用欧宝娱乐app下载地址\组件\路由\加载程序\配置器\RoutingConfigurator;返回函数(RoutingConfigurator美元路线){美元路线- >add (“project_homepage”,' / ')- >控制器([MainController::类,“projectHomepage”])- >主机(“.example.com{项目}”);美元路线- >add (“主页”,' / ')- >控制器([MainController::类,“主页”]);};
此外,任何要求或默认可以设置这些占位符。例如,如果你想匹配m.example.com
和mobile.example.com
,您可以使用:
- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\路由\注释\路线;类MainController扩展AbstractController{/ * * *@Route(* " / ",* name = " mobile_homepage ", *主机=“.example.com{子域名}”,*缺省值={“子域名”=“m”}, *需求={“子域名”=“m |移动”}*)* /公共函数mobileHomepage(){/ /……}/ * * *@Route(" name = "主页")* /公共函数主页(){/ /……}}
1 2 3 4 5 6 7 8 9 10 11 12 13
#配置/ routes.yamlmobile_homepage:路径:/主持人:“.example.com{子域名}”控制器:应用程序控制器\ \ MainController:: mobileHomepage默认值:子域名:米要求:子域名:m |移动主页:路径:/控制器:控制器应用\ \ MainController::主页
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
< !——配置/路线。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=“mobile_homepage”路径=“/”主机=“.example.com{子域名}”控制器=“应用程序控制器\ \ MainController: mobileHomepage”><默认的关键=“子域名”>米< /默认的><要求关键=“子域名”>m |移动< /要求>< /路线><路线id=“主页”路径=“/”控制器=“应用程序控制器\ \ MainController:主页”/ >< /路线>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ /配置/ routes.php使用应用程序\控制器\MainController;使用欧宝娱乐app下载地址\组件\路由\加载程序\配置器\RoutingConfigurator;返回函数(RoutingConfigurator美元路线){美元路线- >add (“mobile_homepage”,' / ')- >控制器([MainController::类,“mobileHomepage”])- >主机(“.example.com{子域名}”)- >违约([“子域名”= >“米”,)- >需求([“子域名”= >“m |移动”]);美元路线- >add (“主页”,' / ')- >控制器([MainController::类,“主页”]);};
提示
您还可以使用服务参数如果你不想硬编码的主机名:
- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30
/ / src /控制器/ MainController.php名称空间应用程序\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\路由\注释\路线;类MainController扩展AbstractController{/ * * *@Route(* " / ",* name = " mobile_homepage ", *主机=“m。{域}", * defaults={"domain"="%domain%"}, * requirements={"domain"="%domain%"} * ) */< /span>公共函数mobileHomepage(){/ /……}/ * * *@Route(" name = "主页")* /公共函数主页(){/ /……}}
1 2 3 4 5 6 7 8 9 10 11 12 13
#配置/ routes.yamlmobile_homepage:路径:/主持人:“米{域}”。控制器:应用程序控制器\ \ MainController:: mobileHomepage默认值:域:“%域%”要求:域:“%域%”主页:路径:/控制器:控制器应用\ \ MainController::主页
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
< !——配置/路线。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=“mobile_homepage”路径=“/”主机=“米{域}”。控制器=“应用程序控制器\ \ MainController: mobileHomepage”><默认的关键=“域”>%域%< /默认的><要求关键=“域”>%域%< /要求>< /路线><路线id=“主页”路径=“/”控制器=“应用程序控制器\ \ MainController:主页”/ >< /路线>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ /配置/ routes.php使用应用程序\控制器\MainController;使用欧宝娱乐app下载地址\组件\路由\加载程序\配置器\RoutingConfigurator;返回函数(RoutingConfigurator美元路线){美元路线- >add (“mobile_homepage”,' / ')- >控制器([MainController::类,“mobileHomepage”])- >主机(“米{域}’。)- >违约([“域”= >“%域%”,)- >需求([“域”= >“%域%”]);美元路线- >add (“主页”,' / ')- >控制器([MainController::类,“主页”]);};
提示
确保你还包含一个默认的选择域
占位符,否则你需要包括一个域值每次生成一个URL使用路线。
使用主机配套的进口路线
你也可以设置主机选项对进口航线:
- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13
/ /供应商/ acme / acme-hello-bundle / src /控制器/ MainController.php名称空间Acme\AcmeHelloBundle\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\AbstractController;使用欧宝娱乐app下载地址\组件\路由\注释\路线;/ * * *@Route(主机= " hello.example.com ") * /类MainController扩展AbstractController{/ /……}
1 2 3 4
#配置/ routes.yamlapp_hello:资源:“@AcmeHelloBundle /资源/ config / routing.yaml”主持人:“hello.example.com”
1 2 3 4 5 6 7 8 9
< !——配置/路线。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”><进口资源=“@AcmeHelloBundle /资源/ config /利用”主机=“hello.example.com”/ >< /路线>
1 2 3 4 5 6 7 8
/ /配置/ routes.php使用欧宝娱乐app下载地址\组件\路由\加载程序\配置器\RoutingConfigurator;返回函数(RoutingConfigurator美元路线){美元路线- >导入(“@AcmeHelloBundle /资源/ config / routing.php”)- >主机(“hello.example.com”);};
主机hello.example.com
将在每个路线从新的路由资源加载。
测试控制器
你需要设置主机HTTP头请求对象如果你想过去你的url匹配功能测试:
1 2 3 4 5 6 7
美元履带=美元客户端- >请求(“得到”,' / '[][],[“HTTP_HOST”= >“m”。。美元客户端- >getContainer ()- >getParameter (“域”)));
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。