> CakePHP中文手册 > The Request Handler Component

The Request Handler Component

Section1 简介

Request Handler component在Cake中是用来判断接收到的Http请求信息的。你可以使用它更好的通知controller来处理那些Ajax请求,获取发起请求的客户端IP地址和请求类型,或者去除无用的数据。你需要在controller中的 $components array中包含request handler来使用它。

class ThingsController extends AppController
{
    var $components = array('RequestHandler');

    // ...
}
		

Section 2 获取客户端请求信息

让我们看一下提供的函数:

accepts 
  string $type 
		

该函数返回客户端是否能接受指定的content-type,传入的参数$type为content-type类型。如果参数为null或者为空,则返回客户端所能接受的全部content-type array。如果传入指定的类型,客户端能接受的话返回true,并且必须包含在content-type map中( 参见 setContent() )。如果$type传入一个array的话,array中的每一个字符串都将被单独测试,如果其中有一个能被接受就返回true。

getAjaxVersion 

如果你使用prototype JS库,它会在发起的Ajax请求头部加上特殊的标记,该函数能够返回Prototype的版本。

getClientIP 

返回客户端IP。

getReferrer 

返回最初发起请求的server name。

isAjax 

返回当前请求是不是由XMLHttpRequest发起的。

isAtom 

返回客户端是否能接受Atom feed content(application/atom+xml)。

isDelete 

返回当前请求方式是否为DELETE。


isGet 

返回当前请求方式是否为GET。

isMobile 

返回当前请求客户端是否为移动设备浏览器。

isPost 

返回当前请求方式是否为POST。

isPut 

返回当前请求方式是否为PUT。

isRss 

返回当前客户端是否能够接受RSS feed content (application/rss+xml)。

isXml 

返回当前客户端是否能够接受XML content (application/xml or text/xml)。
		
setContent 
  string $name 
  string $type

添加content-type别名,方便accepts()和prefers()使用。$name为map的key,$type为map的value,可以为单个字符串或者是字符串数组,为mime类型名。内置的content-type map如下:


// 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' 
		

Section 3 精简数据

有的时候你可能会想从request或者output中删除一些数据。使用下列函数来完成这些操作。

stripAll 
	string $str 

从 $str 中去除所有的空格,图片,脚本(使用 stripWhitespace(), stripImages(), and stripScripts() )。

stripImages 
	string $str 

从 $str 中去除所有内嵌的HTML img标记。

stripScripts 
	string $str 

从 $str 中去除<script>和<style>标记内容。

stripTags 
	string $str 
	string $tag1 
	string $tag2... 

从 $str 中移除参数指定的tag,参数个数不限。

$someString = '<font color="#FF0000"><bold>Foo</bold></font> <em>Bar</em>';

echo $this->RequestHandler->stripTags($someString, 'font', 'bold');

// output: Foo <em>Bar</em>


stripWhiteSpace 
	string $str 
Strips whitespace from $str.
从 $str 中去除空格。
		

Section 4 其他有用的函数

当你的应用中包含Ajax请求时,Request Handler component特别有用。setAjax()函数可以自动侦测Ajax请求,并且设置controller的layout为Ajax layout。这样的好处在于你可以使小模块视图兼职成为Ajax视图。

当请求是由平常的浏览器发起的,<ul>会在默认的layout中输出。如果请求是Ajax请求,则会输出干净的Ajax layout。