当前位置: 首页 > news >正文

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

.如果客户端接受XMLapplication/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

Last Updated:2006年12月03日

相关文章:

  • Itemplate自定义模板列
  • 委托的例子
  • 收藏
  • Linux的发行版及其不同发行版直接的联系与区别
  • 关于qq被盗问题.....
  • 实验五 利用三层交换机实现VLAN间路由
  • 去除开机自启动我的文档
  • 当阳光洒在脸上
  • KeyShot中的环境光遮蔽该怎么进行使用
  • Asp组件龙卷风缩略图水印组件开发
  • [Android Studio 权威教程]断点调试和高级调试
  • Java 专业人士必备的书籍和网站列表
  • JMeter常用字符串相关函数
  • 2006-2007互联网前沿发展大趋势
  • 基于复杂方案OWSAP CsrfGuard的CSRF安全解决方案(适配nginx + DWR)
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • docker-consul
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java比较器对数组,集合排序
  • Java读取Properties文件的六种方法
  • Kibana配置logstash,报表一体化
  • magento 货币换算
  • PHP 小技巧
  • Ruby 2.x 源代码分析:扩展 概述
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 离散点最小(凸)包围边界查找
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 实习面试笔记
  • Android开发者必备:推荐一款助力开发的开源APP
  • Nginx实现动静分离
  • Python 之网络式编程
  • 如何在招聘中考核.NET架构师
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​iOS安全加固方法及实现
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #pragma预处理命令
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (zt)最盛行的警世狂言(爆笑)
  • (待修改)PyG安装步骤
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (四)Controller接口控制器详解(三)
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)3D模板阴影原理
  • (转)JAVA中的堆栈
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .net 程序发生了一个不可捕获的异常
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net和jar包windows服务部署
  • .Net中的集合