Symfony2创建基于域名的路由相关示例


Posted in PHP onNovember 14, 2016

本文实例讲述了Symfony2创建基于域名的路由实现方法。分享给大家供大家参考,具体如下:

你可以匹配将要来到的请求以HTTP域名的方式

YAML方式

mobile_homepage:
 path:  /
 host:  m.example.com
 defaults: { _controller: AcmeDemoBundle:Main:mobileHomepage }
homepage:
 path:  /
 defaults: { _controller: AcmeDemoBundle:Main:homepage }

XML方式

<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://symfony.com/schema/routing
  http://symfony.com/schema/routing/routing-1.0.xsd">
 <route id="mobile_homepage" path="/" host="m.example.com">
  <default key="_controller">AcmeDemoBundle:Main:mobileHomepage</default>
 </route>
 <route id="homepage" path="/">
  <default key="_controller">AcmeDemoBundle:Main:homepage</default>
 </route>
</routes>

PHP方式

use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add('mobile_homepage', new Route('/', array(
 '_controller' => 'AcmeDemoBundle:Main:mobileHomepage',
), array(), array(), 'm.example.com'));
$collection->add('homepage', new Route('/', array(
 '_controller' => 'AcmeDemoBundle:Main:homepage',
)));
return $collection;

两个路由匹配相同的路径  / ,然而第一个将只有域名为m.example.com才匹配

使用占位符

这个域名选项使用占位符的路径匹配系统。这样就意味着你可以在你的域名中使用占位符匹配的域名。

YAML

projects_homepage:
 path:  /
 host:  "{project_name}.example.com"
 defaults: { _controller: AcmeDemoBundle:Main:mobileHomepage }
homepage:
 path:  /
 defaults: { _controller: AcmeDemoBundle:Main:homepage }

XML

<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://symfony.com/schema/routing
  http://symfony.com/schema/routing/routing-1.0.xsd">
 <route id="projects_homepage" path="/" host="{project_name}.example.com">
  <default key="_controller">AcmeDemoBundle:Main:mobileHomepage</default>
 </route>
 <route id="homepage" path="/">
  <default key="_controller">AcmeDemoBundle:Main:homepage</default>
 </route>
</routes>

PHP

use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add('project_homepage', new Route('/', array(
 '_controller' => 'AcmeDemoBundle:Main:mobileHomepage',
), array(), array(), '{project_name}.example.com'));
$collection->add('homepage', new Route('/', array(
 '_controller' => 'AcmeDemoBundle:Main:homepage',
)));
return $collection;

你还可以为这些占位符设置条件和默认的选项。列如,如果你想匹配  m.example.com 和mobile.example.com你可以按照如下方式

YAML

mobile_homepage:
 path:  /
 host:  "{subdomain}.example.com"
 defaults:
  _controller: AcmeDemoBundle:Main:mobileHomepage
  subdomain: m
 requirements:
  subdomain: m|mobile
homepage:
 path:  /
 defaults: { _controller: AcmeDemoBundle:Main:homepage }

XML

<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://symfony.com/schema/routing
  http://symfony.com/schema/routing/routing-1.0.xsd">
 <route id="mobile_homepage" path="/" host="{subdomain}.example.com">
  <default key="_controller">AcmeDemoBundle:Main:mobileHomepage</default>
  <default key="subdomain">m</default>
  <requirement key="subdomain">m|mobile</requirement>
 </route>
 <route id="homepage" path="/">
  <default key="_controller">AcmeDemoBundle:Main:homepage</default>
 </route>
</routes>

PHP

use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add('mobile_homepage', new Route('/', array(
 '_controller' => 'AcmeDemoBundle:Main:mobileHomepage',
 'subdomain' => 'm',
), array(
 'subdomain' => 'm|mobile',
), array(), '{subdomain}.example.com'));
$collection->add('homepage', new Route('/', array(
 '_controller' => 'AcmeDemoBundle:Main:homepage',
)));
return $collection;

你还可以使用服务参数,如果你不想将域名写死写法如下

YAML

mobile_homepage:
 path:  /
 host:  "m.{domain}"
 defaults:
  _controller: AcmeDemoBundle:Main:mobileHomepage
  domain: '%domain%'
 requirements:
  domain: '%domain%'
homepage:
 path: /
 defaults: { _controller: AcmeDemoBundle:Main:homepage }

XML

<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
 <route id="mobile_homepage" path="/" host="m.{domain}">
  <default key="_controller">AcmeDemoBundle:Main:mobileHomepage</default>
  <default key="domain">%domain%</default>
  <requirement key="domain">%domain%</requirement>
 </route>
 <route id="homepage" path="/">
  <default key="_controller">AcmeDemoBundle:Main:homepage</default>
 </route>
</routes>

PHP

use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add('mobile_homepage', new Route('/', array(
 '_controller' => 'AcmeDemoBundle:Main:mobileHomepage',
 'domain' => '%domain%',
), array(
 'domain' => '%domain%',
), array(), 'm.{domain}'));
$collection->add('homepage', new Route('/', array(
 '_controller' => 'AcmeDemoBundle:Main:homepage',
)));
return $collection;

提示

确保你总是包含了默认的选项 domain占位符,否则你需要包含 domain的值每当你使用该路由生成URL的时候。

使用包含进来的路由规则匹配

你可以设置域名选项通过导入路由配置文件,方式如下

YAML

acme_hello:
 resource: '@AcmeHelloBundle/Resources/config/routing.yml'
 host:  "hello.example.com"

XML

<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
 <import resource="@AcmeHelloBundle/Resources/config/routing.xml" host="hello.example.com" />
</routes>

PHP

use Symfony\Component\Routing\RouteCollection;
$collection = new RouteCollection();
$collection->addCollection($loader->import("@AcmeHelloBundle/Resources/config/routing.php"), '', array(), array(), array(), 'hello.example.com');
return $collection;

域名 hello.example.com  将要被设置为加载进来的新路由配置文件中的每个路由

测试你的Controllers

你需要设置HTTP的域名头文件在你请求的对象中,如果你想正确的匹配到网址在你的测试函数中

$crawler = $client->request(
 'GET',
 '/homepage',
 array(),
 array(),
 array('HTTP_HOST' => 'm.' . $client->getContainer()->getParameter('domain'))
);

希望本文所述对大家基于Symfony2框架的PHP程序设计有所帮助。

PHP 相关文章推荐
一个ORACLE分页程序,挺实用的.
Oct 09 PHP
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
Feb 15 PHP
php与php MySQL 之间的关系
Jul 17 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
PHP 读取Postgresql中的数组
Apr 14 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
May 04 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
php无序树实现方法
Jul 28 PHP
谈谈 PHP7新增功能
Dec 16 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
Jun 20 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
May 02 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 #PHP
Symfony2获取web目录绝对路径、相对路径、网址的方法
Nov 14 #PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 #PHP
PHP实现无限分类的实现方法
Nov 14 #PHP
php mysql获取表字段名称和字段信息的三种方法
Nov 13 #PHP
PHP编写daemon process 实例详解
Nov 13 #PHP
php版微信小店API二次开发及使用示例
Nov 12 #PHP
You might like
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
JS支持带x身份证号码验证函数
2008/08/10 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
2015/03/04 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
使用vue编写一个点击数字计时小游戏
2016/08/31 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
tornado捕获和处理404错误的方法
2014/02/26 Python
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
django ajax发送post请求的两种方法
2020/01/05 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
英文自荐信格式
2013/11/28 职场文书
工厂厂长的职责
2013/12/12 职场文书
法律专业实习鉴定
2013/12/22 职场文书
学前教育求职自荐信范文
2013/12/25 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
创新社会管理心得体会
2014/09/12 职场文书
群众路线党员个人剖析材料
2014/10/08 职场文书
第一节英语课开场白
2015/06/01 职场文书
信仰纪录片观后感
2015/06/08 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python