recess----3.Controller如何和View关联
上一篇我们讲到,Recess框架里面的controller就是一个典型的MVC框架的controller,它负责处理从浏览器(或其它客户端)过来的request,然后调用引用model里面的方法来进行运算,最后选择合适的view来产生response,然后把response发回给客户端。这里我们开始了解Controller和View到底是怎样的关系。
1、决定使用哪一个view
事实上,目前为止,我们例程的controller里面已经有了两个method:index和printIt。而这两个method一个是有view的,另外一个没有。printIt比较特殊,我们在这里添加了exit,它就没有再继续执行了,所以,可以暂时放一边不用管;或者我们觉得没必要使用view的时候,可以这么处理。
我们着重介绍index的view,index.html.php。
<html>
<header>
<title>Great Works!</title>
</header><body>
<p>Hello Friends,</p>
<p>Message from controller:<?php echo $message; ?></p>
<p>Great Works! You build your first APP in Recess successfully!</p>
<p><strong><a href="http://www.cnblogs.com/pied">Luo Zhenxing</a></strong>
<br />(<a href="mailto:piedgogo@gmail.com">e-mail</a>)</p>
</body>
</html>
重要规则:controller负责指定由哪一个view来响应,如果没有指定的话,会自动去该controller的/view目录下寻找nameOfTheControllerMethod.html.php。例如,我们的function index中并没有指定view,那么,recess默认回去找index.html.php。如果还没有找到,则会抛出错误。
我们的例程里面已经展示使用默认的view,那如何指定使用哪一个view?如下,使用ok方法:
class HelloWorldController extends Controller {
function printIt() {
return $this->ok('the-view');
}
}
使用return $this->ok()这一方法,成功的告诉recess,我们准备用/view/home/the-view.php来作为该方法的返回页面。具体可以自行编辑文件尝试。
2、传递变量到view
回顾我们的第一个app,index方法只作了一件事,给公共变量message赋值:
$this->message = 'Hello Recess!';
我们在index.html.php里面有取用这一变量:
<?php echo $message; ?>
当然,不管有多少个变量,取用方法都是一样的。事实上,在controller里面声明的公共变量,会被copy到Response object里面去,进而被传给view。这一过程有点“备忘录模型”(memento)的影子。
这里,作者还提供了一个方便我们调试的方法,即,在view中使用fail方法,来强行生成一个诊断页面,没错,就是那个你前面遇到过的黄黄绿绿的页面。在这里产生诊断页面,它会把当前view可用的变量全部打印出来。如此方便我们编写view。具体可参考下面:
<html>
<head><title>Hello World View</title></head>
<body>
<?php echo $fail; ?>
</body>
</html>
页面上的context table就是我们想要看到的了。
3、关于response object
controller method可以不用返回任何东西,或者是返回一个response object。当我们不返回任何东西的时候,就像前面描述的那样,默认认为该controller method返回了一个ok response,并且,这一ok response使用和该controller method同名的一个view template。
response object需要产生一系列应答http request需要的信息,包括:response code, 要传递给view的数据, response需要的header, cookies, request的一个reference, 还有recess需要的一些meta data。具体的,controller的抽象类会帮你处理好这一切。
例如,ok方法对应的就是 “HTTP 200 OK”这一response code。其它的还包括:conflict, redirect, forwardOk, forwardNotFound, created, unauthorized等。‘forward’和‘created’属于比较特殊的response。
recess----3.Controller如何和View关联的更多相关文章
- DAO层,Service层,Controller层、View层 的分工合作
DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...
- [转]DAO层,Service层,Controller层、View层
来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...
- DAO层,Service层,Controller层、View层
DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口 ...
- 分层 DAO层,Service层,Controller层、View层
前部分摘录自:http://blog.csdn.net/zdwzzu2006/article/details/6053006 DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务 ...
- DAO层,Service层,Controller层、View层介绍
来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DA ...
- DAO层,Service层,Controller层、View层协同工作机制
转自 http://www.blogdaren.com/post-2024.html DAO层:DAO层主要是做数据持久层的工 作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计D ...
- DAO层,Service层,Controller层、View层、entity层
1.DAO(mapper)层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就 ...
- .NET controller传给view的bool类型
问题: 在view中访问该变量是False,不是字符串,也不是bool类型的false. 解决方法: controller: ViewBag.Test = false; view中得到false值: ...
- asp.net mvc area实现多级controller和多级view
经常需要描述这样的项目结构 ~:. //web根目录├─.admin //管理员功能目录│ └─index.html //管理员目录页面├─.user / ...
随机推荐
- “玲珑杯”ACM比赛 Round #19 B -- Buildings (RMQ + 二分)
“玲珑杯”ACM比赛 Round #19 Start Time:2017-07-29 14:00:00 End Time:2017-07-29 16:30:00 Refresh Time:2017-0 ...
- [BZOJ4710][JSOI2011]分特产(组合数+容斥原理)
4710: [Jsoi2011]分特产 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 395 Solved: 262[Submit][Status] ...
- BZOJ 3594 [Scoi2014]方伯伯的玉米田(二维树状数组)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3594 [题目大意] 给出一个数列,选出k个区间使得区间内数全部加1, 求k次操作之后最 ...
- 【扫描线】Gym - 100781G - Goblin Garden Guards
平面上有100000个哥布林和20000个圆,问你不在圆内的哥布林有多少个. 将每个圆从左到右切2r+1次,形成(2r+1)*2个端点,将上端点记作入点,下端点记作出点,再将这些点和那些哥布林一起排序 ...
- 【欧拉回路】【Fleury算法】CDOJ1642 老当益壮, 宁移白首之心?
题意: 构造一个01串,使得满足以下条件: 1. 环状(即首尾相连) 2. 每一位取值为0或1 3. 长度是2^n 4. 对于每个(2^n个)位置,从其开始沿逆时针方向的连续的n位01串(包括自己) ...
- vue组件续和前端工程化
1.3 插槽 slot template: ` <button> <slot></slot> </button> ` <my-button> ...
- Uncaught SyntaxError: Invalid shorthand property initializer
$.ajax({ url : '../../collateralQuery/getCollateralQueryDetail', type : 'POST', data : {}, dataType ...
- Java高级架构师(一)第35节:Nginx的Location区段
没有修饰符 表示:必须以指定模式开始. 表示/abc下的所有内容都可以被访问. = 表示与指定的模式精确匹配,可以带参数. 实例中要求区分大小写,并以c结尾. 实例中指定的正则表达式不区分大小写. 注 ...
- 探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用23
前言 首先说明这并不是一个教程贴,而记事本应用是网上早有的案例,对于学习 vuex 非常有帮助.我的目的是探索 vuex 2.0 ,然后使用 vuejs 2.0 + vuex 2.0 重写这个应用,其 ...
- ECSHOP中transport.js和jquery冲突的解决方法
jQuery 和global.js 冲突 百度和google多次,根据网上的大多数建议和自己测试,解决办法如下:删除global.js 或者global.js 文件的10-13行屏蔽//Object. ...