CakePHP中文手册【翻译】-请求处理组件
请求处理组件
第1节
介绍
在Cake里,使用请求处理组件来决定关于进来的HTTP请求信息。你可以使用它更好的通知你的controller关于AJAX请求,得到关于远程客户端IP地址,以及请求的内容类型,或者去除输出数据中你不想要的数据的信息。为了使用请求组件,你需要确保在Controller的$component数组中指定它。.
class ThingsController extends
AppController { var $components = array('RequestHandler'); // ... } |
第2节
获取客户/请求信息
让我们更深入一步:
accepts
- string $type
返回客户接受的content-type信息,这取决于$type值。如果传入null或无值,它将返回一个客户端接受的content-type数组。如果传入一字符串,而且在content-type中检验$type(参看setContent()),客户端接受它,它返回true。如果$type是一个数组,每个字符串将分别计算,如果只要他们中的一个符合接受的content-type类型,accepts()方法返回true。例如:
class PostsController extends
AppController { var $components = array('RequestHandler'); function beforeFilter () {
if ($this->RequestHandler->accepts('html')) {
// Execute code
only if client accepts an HTML (text/html) response
}
elseif ($this->RequestHandler->accepts('rss'))
{
// Execute RSS-only
code
}
elseif ($this->RequestHandler->accepts('atom'))
{
// Execute
Atom-only code
}
elseif ($this->RequestHandler->accepts('xml'))
{
// Execute XML-only
code
}
if ($this->RequestHandler->accepts(array('xml', 'rss', 'atom'))) {
// Executes if the
client accepts any of the above: XML, RSS or Atom
} } } |
- getAjaxVersion
如果你正在使用Prototype JS库,你可以获取一个特殊的头,此头在AJAX请求中设定。本函数返回使用的Prototype版本。
- getClientIP
返回远程客户端的IP地址。
- getReferrer
返回请求起源的服务器名。
- isAjax
如果当前的请求是一个XMLHttpRequest,返回true。
- isAtom
如果客户端接受Atom feed内容(application/atom+xml),返回true。
- isDelete
如果当前的请求通过DELETE,返回true。
- isGet
如果当前请求通过GET,返回true。
- isMobile
如果user agent字符串符合一个移动的web浏览器,返回true。
- isPost
如果当前请求通过POST,返回true。
- isPut
如果当前请求通过PUT,返回true。
- isRss
如果客户端接受RSS feed内容(application/rss+xml),返回true。
- isXml
.如果客户端接受XML(application/xml or text/xml),返回true。
setContent
- string $name
- string $type
对于accepts() 和prefers()的使用,增加一个content-type别名映射,在这里$name是映射(字符串)的名字,$type是一个字符串或者一个字符串数组。它们每个都是一个MIME类型。内建的类型映射如下:
// Name
=> Type
'js' =>
'text/javascript',
'css' => 'text/css',
'html' => 'text/html',
'form' =>
'application/x-www-form-urlencoded',
'file' =>
'multipart/form-data',
'xhtml' => array('application/xhtml+xml', 'application/xhtml',
'text/xhtml'),
'xml' => array('application/xml', 'text/xml'),
'rss' =>
'application/rss+xml',
'atom' =>
'application/atom+xml' |
第3节
清除数据
你偶尔想删除来自一个请求或输出的数据,使用下面的请求处理函数来完成这些操作吧。
stripAll
- string $str
删除$str中的空格,图像,以及脚本(using stripWhitespace(), stripImages(), 和stripScripts()).
stripImages
- string $str
从$str中删除任何嵌入图像的HTML。
stripScripts
- string $str
从$str中删除任何与<script> 和<style>相关的标签。
stripTags
- string $str
- string $tag1
- string $tag2...
从$str中删除$tag1,
$tag2等指定的标签。
$someString = '<font
color="#FF0000"><bold>Foo</bold></font>
<em>Bar</em>'; echo $this->RequestHandler->stripTags($someString, 'font', 'bold'); // 输出: Foo <em>Bar</em> |
stripWhiteSpace
- string $str
从$str中删除空格。
第4节
其他有用的函数
当你的应用程序包含AJAX请求时,请求处理组件非常有用。使用setAjax()函数来自动检测AJAX请求,并为请求将Controller的布局设置为AJAX布局。这样的好处是你可以创建小的分块的view,这些view作为AJAX
view也可能是双倍的。
// list.thtml <ul> <? foreach ($things as $thing):?> <li><?php echo $thing;?></li> <?endforeach;?> </ul> //------------------------------------------------------------- //The list action of my ThingsController: function list() { $this->RequestHandler->setAjax($this); $this->set('things', $this->Thing->findAll()); } |
当一个普通的浏览器请求为/things/list时,对于应用程序而言,无序列会在缺省的布局里render。如果把URL作为一个AJAX操作的一部分请求时,列表会自动在空的AJAX布局里render。