如何创建一个网站的优化版本的iPhone
ob娱乐下载symfony 1.1引入了本地支持和mime类型不同的格式。这意味着相同的模型和控制器可以根据请求的格式有不同的模板。默认的格式仍然是HTML,但symfony支持其他格式的定义ob娱乐下载factories.yml
文件:
要求:类:sfWebRequest参数:格式:txt:文本/纯js:[应用程序/ javascript、应用程序/ x-javascript text / javascript] css:文本/ css json: (application / json, application / x-json) xml: [text / xml、application / xml应用程序/ x-xml] rdf: application / rdf + xml atom: application / atom + xml
每个格式与一个或多个mime类型相关联。这些mime类型用于自动确定请求的格式通过解析接受
HTTP报头。这是非常方便的,如果你想让你的数据可以通过一个浏览器并作为Web服务公开。改变响应的格式,一个Web服务客户机可以改变接受
头如下所示:
美元curl - h”接受:application / xml”http://ws.example.com/api/article获得数据的xml表示美元curl - h”接受:application / json " http://ws.example.com/api/article数据的json表示
支持不同的格式一样容易创建不同的模板。所以,假设web服务是由一个管理api /条
行动。这是你必须创建模板的列表应用程序/前端/模块/ api /模板
支持HTML、XML和JSON格式:
- articleSuccess.php
- articleSuccess.xml.php
- articleSuccess.json.php
默认情况下,symfonob娱乐下载y会改变的反应内容类型
根据格式,和所有html格式,布局将被禁用。甚至泛音和布局可以根据请求的格式是不同的。例如,如果您包含一个列表
部分模板,加载部分名称将取决于当前的格式:
- _list.php
- _list.xml.php
- _list.json.php
让我们看另外一个例子。你想创造一些样式表或JavaScript文件。你不能总是依赖于浏览器接受
HTTP头的情况下,您可以通过使用特殊的强制格式sf_format
在你的路由规则变量。这是为一个动态样式表创建一个路线:
css1中:url: / css / dynamic1。css参数:{模块:css,行动:动态,sf_format: css}
您还可以使用sf_format
变量URL模式允许多种格式的一个动作:
api_article: url: / api /条。:sf_formatparam: { module: api, action: article } requirements: sf_format: (?:html|xml|json)
大多数时候,你不需要改变你的行动来支持新的一行格式;但如果你真的需要做一些特别的格式,您可以调用$请求- > getRequestFormat ()
获取当前格式并采取相应行动。
好,现在好玩的部分来了!假设您希望创建一个网站的优化版本的iPhone。的iphone
默认格式不存在但很容易配置。首先,我们需要一种方法来确定请求来自iPhone。如果用户代理
头包含了单词移动
和Safari
安全,我们可以猜测,浏览器是一个iPhone。我们可以把这个逻辑ProjectConfiguration
类通过注册一个侦听器request.filter_parameters
事件:
/ /配置/ ProjectConfiguration.class.php类ProjectConfiguration扩展sfProjectConfiguration{公共函数设置(){/ /……这个美元- >调度程序- >连接(“request.filter_parameters”,数组(这个美元,“filterRequestParameters”));}公共函数filterRequestParameters(sfEvent美元的事件,美元的参数){美元的请求=美元的事件- >getSubject();如果(preg_match(“#移动/ + Safari #我'。,美元的请求- >getHttpHeader(“用户代理”))){美元的请求- >setRequestFormat(“iphone”);}返回美元的参数;}}
现在,每次请求的时候,filterParameters ()
方法被调用,如果浏览器是一个iPhone,请求格式更改iphone
。
这是所有!现在,每个请求从iPhone将使用* Success.iphone.php
模板,而不是* Success.php
模板。
如果你使用一些特殊的样式表或JavaScript文件支持iPhone(例如,如果你使用iui图书馆),你也可以通过听配置视图view.configure_format
:
类ProjectConfiguration扩展sfProjectConfiguration{公共函数设置(){/ /……这个美元- >调度程序- >连接(“view.configure_format”,数组(这个美元,“configureIPhoneFormat”));}公共函数configureIPhoneFormat(sfEvent美元的事件){如果(“iphone”= =美元的事件(“格式”]){/ /添加一些CSS、javascript或任何你想要的}}}
多亏了新格式支持因为symfony 1.1,开发网站,支持Web服务API或iob娱乐下载Phone从来都不是一件容易的事。支持一种新的格式一样容易创建一个新的模板。
这个工作许可适用创作共用署名下衍生著作3.0 Unported许可执照。