使用Request Object

介绍

request对象在每次脚本执行时创建,如,SGL_FrontController::run()被调用时。你可以通过下列代码取得request对象的参考:

$req = SGL_Request::singleton();

或,如果registry实例$input在引作用域,你也可以这样取得:

$input->getRequest();

request对象收集了应用程序所需的数据。它对数据执行了最低限度的过滤并检查其完整性。

在managers中,validate()函数允许开发人员建立自己的逻辑来决定哪些数据是有效的。被认为是有效的数据将被拷贝到$input对象。

request对象是由$_REQUEST值组成的,它将被提交给预处理:

  • 如果启用了magic quote,将删除所有的斜杠
  • 如果$allowTags设成默认值false,将去掉所有HTML标签
  • 如果允许HTML,将剥掉所有javascript代码
  • 删掉字符串的首尾空格
  • 去掉所有ASCII中的零点

查看[http://trac.seagullproject.org/browser/trunk/lib/SGL/Request.php|trunk/lib/SGL/Request.php]]以获得所有可用的方法信息。

Best Practices

你永远不会用到末经处理的$_REQUEST数组,经过上面所说的加工处理,你可以通过下列代码来取得你想要的值:

$input->myVar = $req->get('myVar');

如果你不想自动去除HTML:

$input->aDataItemValue = $req->get('frmFieldName', $allowTags = true);

所有收集到的数据

URI 解析

由于request对象使用单键模式,所以在每次脚本调用时它只被创建一次。在创建初始化时,它从请求URI中提取数据。Seagull允许开发人员选择大量URI的解析策略,结果被组成到请求数据。简单的说,URI数据会被提取,同样标准的查询信息也会被提取,而且相关的URI别名也会被处理。更多信息看UriManagement

URI解析完后,下列键值将被添加到request对象:

[frontScriptName] => index.php
[moduleName] => currentModule
[managerName] => currentManagerClass

frontScriptName变量用来保存是作为入口,或者是前端控制器的文件名。开发者可以任意命名这个文件或不使用它而使用mod_rewrite并将'frontScriptName'设成false。

URI 缓存

解析URI是很上用资源的,由于URI映射被缓存,所以在缓存期间,任何一个URI不会被重复解析。

Cool URIs don't change

Interesting W3C material worth reading on the subject of [http://www.w3.org/Provider/Style/URI good URL construction].

 
howto/workingwiththerequestobject.txt · 最后更改: 2010/05/30 00:21 (外部编辑)
 
Except where otherwise noted, content on this wiki is licensed under the following license:GNU Free Documentation License 1.2