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。
最新文章
- linux 安装mysql两种方式
- 转义字符(\)对JavaScript中JSON.parse的影响概述
- Object-C中一些不同于C系列语言表现的特性
- Java核心:类加载和JVM内存的分配
- GOF业务场景的设计模式-----策略模式
- oracle数据导出工具sqluldr2
- ClassLoader加载
- hdu 1272
- HTTP 无法注册 URL http://+:12345/HelloWcfService/。进程不具有此命名空间的访问权限
- Laravel 5.1 事件、事件监听的简单应用
- AIX Study之--AIX网卡配置管理(ent0、en0、et0)
- 优酷m3u8视频源地址获取失败
- TensorRT&;Sample&;Python[yolov3_onnx]
- struts2_HelloWorld
- CGI,FastCGI,PHP-CGI与PHP-FPM区别详解【转】
- Navicat连接Oracle 报 ORA-12737 set CHS16GBK错误
- python dash 初探 --- k 线国内版
- git版本控制工具的使用(3)
- 乘风破浪:LeetCode真题_022_Generate Parentheses
- Splunk Enterprise architecture——转发器本质上是日志收集client附加负载均衡,indexer是分布式索引,外加一个集中式管理协调的中心节点
热门文章
- 杭电oj 1001
- ACM的奇计淫巧_bitset优化
- JZYZOJ1442 [noip2013]华容道 bfs 最短路 剪枝
- 【计算几何】【圆反演】hdu6097 Mindis
- 【二分】【半平面交】Gym - 101309J - Jungle Outpost
- 【数论】nefu119 组合素数
- 【递推+高精度】POJ2506-Tiling
- Educational Codeforces Round 9 E. Thief in a Shop dp fft
- 用js给循环的列表添加click事件
- 转载:ArcEngine二次开发界面基本设置