事实上,第一个APP里面除了没有model,其它的都有用过了,但是需要单独拎出来看看清楚。

Recess框架里面的controller就是一个典型的MVC框架的controller,它负责处理从浏览器(或其它客户端)过来的request,然后调用引用model里面的方法来进行运算,最后选择合适的view来产生response,然后把response发回给客户端。这里没有什么好纠结的,深入的得去看代码了。

这里的过程,我们继续在Hello Recess这一个APP的基础上来进行。

不妨再回来看看第一个例子里面的controller:

<?php
Library::import('recess.framework.controllers.Controller');
/**
* !RespondsWith Layouts
* !Prefix Views: home/, Routes: /
*/
class HelloRecessHomeController extends Controller { /** !Route GET */
function index() {
$this->flash = 'Hello Recess!';
}
}
?>

前面有大概介绍,这里的注释“!Route GET”是做routing来用的。什么实现啊,效率啊,咱暂时不关心,那是后面的话题,咱还是继续讨论controller。controller都处理些什么呢?OK,上面的例子处理的就是浏览器发来的GET请求。我们知道,HTTP的标准请求包括了request METHOD,variables, headers, cookies, URL等等这些。而注释里的“!Route”就是告诉routing,我们用controller里面的这个method(这里指contorller这个类里面的一个函数,也就是方法)来处理相应的“GET/POST/PUT/DELETE”这些HTTP METHOD(这里指HTTP协议里面定义的请求方式)。然后,我们可以通过一系列借口来取出request携带的信息并进行处理。

以GET请求为例,我们看看怎样取出信息。我们需要再给这个controller添加一个method:

    /** !Route GET, printIt */
function printIt() {
print $this->request->resource . '<br />';
print_r($this->request);
exit;
}

这里,我们不需要使用view,所以直接exit。我们直接在浏览器查看的话,它会直接打印出request这个object的所有内容。

访问http://localhost/helloRecess/printIt,看到以下信息(直接打印在屏幕上的有些乱,这里是查看源代码后的结构):

/helloRecess/printIt

Request Object
(
[accepts] => Accepts Object
(
[headers:protected] => Array
(
[ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
[ACCEPT_ENCODING] => gzip,deflate,sdch
[ACCEPT_LANGUAGE] => zh-CN,zh;q=0.8,en;q=0.6
[CACHE_CONTROL] => max-age=0
[CONNECTION] => keep-alive
[COOKIE] => CNZZDATA5619041=cnzz_eid%3D1321855538-1388926353-%26ntime%3D1388926353%26cnzz_a%3D0%26ltime%3D1388926352365; session=GYjQdK9TIghhNg5jeOX40Wj5fswl1qoGNYg0spSAT9qqptZRI4TIZALE2Gz46lKT
[HOST] => www.noarduino.com
[USER_AGENT] => Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36
) [format:protected] =>
[formats:protected] =>
[formatsTried:protected] => Array
(
) [formatsCurrent:protected] => Array
(
) [languages:protected] =>
[encodings:protected] =>
[charsets:protected] =>
) [format] => html
[headers] => Array
(
[ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
[ACCEPT_ENCODING] => gzip,deflate,sdch
[ACCEPT_LANGUAGE] => zh-CN,zh;q=0.8,en;q=0.6
[CACHE_CONTROL] => max-age=0
[CONNECTION] => keep-alive
[COOKIE] => CNZZDATA5619041=cnzz_eid%3D1321855538-1388926353-%26ntime%3D1388926353%26cnzz_a%3D0%26ltime%3D1388926352365; session=GYjQdK9TIghhNg5jeOX40Wj5fswl1qoGNYg0spSAT9qqptZRI4TIZALE2Gz46lKT
[HOST] => www.noarduino.com
[USER_AGENT] => Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36
) [resource] => /helloRecess/printIt
[resourceParts] => Array
(
[0] => helloRecess
[1] => printIt
) [method] => GET
[input] =>
[isAjax] =>
[get] => Array
(
) [post] => Array
(
) [put] => Array
(
) [cookies] => Array
(
[CNZZDATA5619041] => cnzz_eid=1321855538-1388926353-&ntime=1388926353&cnzz_a=0&ltime=1388926352365
[session] => GYjQdK9TIghhNg5jeOX40Wj5fswl1qoGNYg0spSAT9qqptZRI4TIZALE2Gz46lKT
) [meta] => Meta Object
(
[app] => HelloRecessApplication Object
(
[name] => Hello Recess
[controllersPrefix] => helloRecess.controllers.
[modelsPrefix] => helloRecess.models.
[viewsDir] => /home/qkdemoco/domains/noarduino.com/public_html/apps/helloRecess/views/
[assetUrl] => /apps/helloRecess/public/
[routingPrefix] => helloRecess/
[plugins] => Array
(
) [viewPathFinder:protected] => PathFinder Object
(
[paths:protected] => Array
(
[0] => /home/qkdemoco/domains/noarduino.com/public_html/recess/recess/framework/ui/parts/
[1] => /home/qkdemoco/domains/noarduino.com/public_html/apps/helloRecess/views/
) ) ) [controllerMethod] => printIt
[controllerMethodArguments] => Array
(
) [useAssociativeArguments] => 1
[controller] => HelloRecessHomeController Object
(
[request:protected] => Request Object
*RECURSION*
[headers:protected] =>
[application:protected] => HelloRecessApplication Object
(
[name] => Hello Recess
[controllersPrefix] => helloRecess.controllers.
[modelsPrefix] => helloRecess.models.
[viewsDir] => /home/qkdemoco/domains/noarduino.com/public_html/apps/helloRecess/views/
[assetUrl] => /apps/helloRecess/public/
[routingPrefix] => helloRecess/
[plugins] => Array
(
) [viewPathFinder:protected] => PathFinder Object
(
[paths:protected] => Array
(
[0] => /home/qkdemoco/domains/noarduino.com/public_html/recess/recess/framework/ui/parts/
[1] => /home/qkdemoco/domains/noarduino.com/public_html/apps/helloRecess/views/
) ) ) ) ) [username] =>
[password] =>
)

在这里,一个Request携带了哪些信息一目了然,至于调用的方法:

1)字符串。比如上面的resource项,直接使用$this->request->resource即可。

2)array。比如上面的headers项中Host项,使用$this->request->headers[HOST]即可。get、post、put三个array的取用方法也一样,对应Key=value;可以尝试访问http://localhost/helloRecess/printIt?foo=bar,看看上面的request->get这个array里面有什么变化。

recess----2.Controller里面取用request信息的更多相关文章

  1. SpringMVC Controller中注入Request成员域和在方法中定义中HttpServletRequest有啥区别

    先说结论,在Controller中注入Request是线程安全的. 以下是解释: 我们先来看看这两者有什么不同 在controller注入成员变量request 可以看到注入的是一个代理对象 写在方法 ...

  2. spring mvc controller中获取request head内容

    spring mvc controller中获取request head内容: @RequestMapping("/{mlid}/{ptn}/{name}") public Str ...

  3. python 抓取request信息,各种cookie,user-agent类的信息,只调试到http可以抓取,https貌似不行。

    import pcap # 安装的是pypcap,本博客有安装方法,不过也比较乱,试试吧.import dpktimport socketimport datetime def sniffer(str ...

  4. ASP.NET Core 如何记录每次请求的Request信息 - sky 胡萝卜星星 - CSDN博客

    原文:ASP.NET Core 如何记录每次请求的Request信息 - sky 胡萝卜星星 - CSDN博客 版权声明:本文为starfd原创文章,转载请标明出处. https://blog.csd ...

  5. 支付宝小程序serverless---获取用户信息(头像)并保存到云数据库

    支付宝小程序serverless---获取用户信息(头像)并保存到云数据库 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 我又 ...

  6. 在springMVC的controller中获取request,response对象的一个方法

    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttr ...

  7. controller 监控Unix性能信息

    linux系统需要有RPC(Remote Procedure Call Protocol),远程过程调用协议,通过安装rpc.rstatd程序,启动其服务,就可以给远程机器提供信息,即Lr可以获取到该 ...

  8. Spring-boot 配置Aop获取controller里的request中的参数以及其返回值

    首先在你的Maven的pom文件里加入aop的依赖: <dependency> <groupId>org.springframework.boot</groupId> ...

  9. 【转】在SpringMVC Controller中注入Request成员域

    原文链接:https://www.cnblogs.com/abcwt112/p/7777258.html 原文作者:abcwt112 主题 在工作中遇到1个问题....我们定义了一个Controlle ...

随机推荐

  1. Eclipse - Tasks介绍

    完整的过程 1.1.新定义标签 位置:Window —— Preferences —— Java —— Compiler —— Task Tags —— New 说明: 默认的任务标签有三个FIXME ...

  2. Hive的严格模式

    在hive里面可以通过严格模式防止用户执行那些可能产生意想不到的不好的效果的查询,从而保护hive的集群. 用户可以通过 set hive.mapred.mode=strict 来设置严格模式,改成u ...

  3. [BZOJ3622]已经没有什么好害怕的了(容斥DP)

    给定两个数组a[n]与b[n](数全不相等),两两配对,求“a比b大”的数对比“b比a大”的数对个数多k的配对方案数. 据说做了这题就没什么题好害怕的了,但感觉实际上这是一个套路题,只是很难想到. 首 ...

  4. CodeForces - 524F And Yet Another Bracket Sequence

    题面在这里! (会考完之后休闲休闲2333) 可以发现,如果把一个串中"()"自动删除,最后剩的一定是形如"))))....))(((..((("这样的串,然后 ...

  5. [转]Spring Security学习总结一

    [总结-含源码]Spring Security学习总结一(补命名空间配置) Posted on 2008-08-20 10:25 tangtb 阅读(43111) 评论(27)  编辑  收藏 所属分 ...

  6. Unity3D 粒子系统

    我们先来看看Particle System在Inspector视窗中的属性: 1.Transform:可以控制粒子在世界或者本地坐标的改变.但是有点注意的是,如果你改变Scale属性值是不会影响粒子的 ...

  7. mysql语句总结

    mysql语句总结 -- 1,通过windows提供的服务管理来完成 -- services.msc -- 2,dos下的命令来完成 -- 停止 -- net stop mysql -- 启动 -- ...

  8. HDU 1845 Jimmy’s Assignment(二分匹配)

    Jimmy’s Assignment Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Other ...

  9. JS/JQuery判断是否移动设备+JS/JQuery判断浏览器类型

    原文:https://blog.csdn.net/Little_Stars/article/details/48624669 JS代码如下(点击事件依赖JQuery): //判断设备类型 $(&quo ...

  10. CSS -- 文字竖直居中

    元素的height 和 lineheight 设置为一样即可.