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 / ...
随机推荐
- 并发系列3-大白话聊聊Java并发面试问题之谈谈你对AQS的理解?【石杉的架构笔记】
- SCU - 4439 Vertex Cover (图的最小点覆盖集)
Vertex Cover frog has a graph with \(n\) vertices \(v(1), v(2), \dots, v(n)\) and \(m\) edges \((v(a ...
- 【vim】mac配置vim,molokai配色
效果如下: 首先修改主目录下的.vimrc: "======================================================================= ...
- Python开发基础-Day1-python入门
编程语言分类 机器语言 使用二进制代码直接编程,直接与硬件交互,执行速度非常快,灵活,但是开发难度高,开发效率低下,缺乏移植性. 汇编语言 对机器语言指令进行了英文封装,较机器语言容易记忆,直接与硬件 ...
- Beaglebone Black教程使用SSH通过USB和因特网连接Beaglebone Black
Beaglebone Black教程使用SSH通过USB和因特网连接Beaglebone Black 使用SSH通过USB和因特网连接Beaglebone Black SSH是Secure Shell ...
- BZOJ 3391 [Usaco2004 Dec]Tree Cutting网络破坏(树形DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3391 [题目大意] 给定一棵树,求分支size均不大于一半点数的点 [题解] 递归的同 ...
- python基础之包与logging模块
包 1.什么是包? 包是模块的一种形式,包的本质就是一个含有__init__.py文件的文件夹 2.为什么要有包? 提高程序的结构性和可维护性 3.如何使用包? 导入包就是在导包下的__init__. ...
- MATLAB/Octave中implicit conversion from real matrix to real scalar错误原因与解决
写程序时提示 implicit conversion from real matrix to real scalar的一个warning,主要问题在于将一个矩阵当成一个标量在使用.我的程序出现这个wa ...
- Adaptive Query Optimization in Oracle Database 12c (12.1 and 12.2)
https://oracle-base.com/articles/12c/adaptive-query-optimization-12cr1
- subline text 常用插件
C语言 Alignment c Improved cool format doc Blocker cTags AllAutoComplete wakatime 精确统计你再 ...