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。