事实上,第一个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. 关于 Unity WebGL 的探索(二)

    关于 Unity WebGL 的探索(二) 上一篇博客记录了关于 WebGL 移植的第一步:部分 C/C++ 插件的编译,目前项目中的部分插件使用该方法通过,接下来比较大的一部分工作量是网络模块 We ...

  2. 29、Flask实战第29天:cms用户名渲染和注销功能实现

    这节来完成用户名渲染和注销的功能,目前用户名在前端页面是写死的,我们需要动态的展示出来 用户名渲染 实现用户名动态展示,其中一种方法就是在视图函数,根据session信息,获取到user id,通过该 ...

  3. [P1640][SCOI2010]连续攻击游戏

    Link: P1640 传送门 Solution: 可以发现这道题其实是属性值集合和装备集合的对应,且每个点只能用一次 那么就能想到二分图最大匹配,一旦不可行直接退出就行了 Tip: 1.$Hungr ...

  4. [Lydsy1806月赛] 路径统计

    题面在这里! xjb想的做法竟然不小心把std艹爆了qwq,我也很无奈啊.... 那接下来就说一下我的神奇做法qwq 如果是经常读我博客的童鞋会发现其实我以前就想要做这个题啦,只不过当时读错题啦... ...

  5. BZOJ 3790 神奇项链(manacher+DP+树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3790 [题目大意] 问最少用几个回文串可以构成给出串,重叠部分可以合并 [题解] 我们 ...

  6. 【计算几何】【凸包】【极角排序】【二分】Gym - 101128J - Saint John Festival

    平面上n个红点,m个黑点,问你多少个黑点至少在一个红三角形内. 对红点求凸包后,转化为询问有多少个黑点在凸包内. 点在凸多边形内部判定,选定一个凸包上的点作原点,对凸包三角剖分,将其他的点极角排序之后 ...

  7. 【动态规划】【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem B. Dissertation

    题意: 给定S1串,长度100w,S2串,长度1k.问它俩的LCS. f(i,j)表示S2串前i个字符,LCS为j时,最少需要的S1串的前缀长度.转移的时候,枚举下一个字符在S1的位置即可.(可以预处 ...

  8. 【深度搜索+剪枝】POJ1011-Sticks

    深搜部分和之前的POJ2362差不多,只是有几处需要额外的剪枝. [思路]排序后从最短木棒开始搜索至木棒长总和,如果木棒长总和sum能整除当前棒长,则进入深搜. [剪枝]先前POJ2362的剪枝部分不 ...

  9. 【最大流/费用流】BZOJ1834-[ZJOI2010]network 网络扩容

    [题目大意] 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的最小扩容费 ...

  10. 获取asp.net mvc应用程序的根目录

    如果使用Server.MapPath(“controllerName”)这样取得的是带控制权名称的目录, 所以要取得上一级目标,如:Server.MapPath("../"),这才 ...