上一篇我们讲到,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。

最新文章

  1. linux 安装mysql两种方式
  2. 转义字符(\)对JavaScript中JSON.parse的影响概述
  3. Object-C中一些不同于C系列语言表现的特性
  4. Java核心:类加载和JVM内存的分配
  5. GOF业务场景的设计模式-----策略模式
  6. oracle数据导出工具sqluldr2
  7. ClassLoader加载
  8. hdu 1272
  9. HTTP 无法注册 URL http://+:12345/HelloWcfService/。进程不具有此命名空间的访问权限
  10. Laravel 5.1 事件、事件监听的简单应用
  11. AIX Study之--AIX网卡配置管理(ent0、en0、et0)
  12. 优酷m3u8视频源地址获取失败
  13. TensorRT&amp;Sample&amp;Python[yolov3_onnx]
  14. struts2_HelloWorld
  15. CGI,FastCGI,PHP-CGI与PHP-FPM区别详解【转】
  16. Navicat连接Oracle 报 ORA-12737 set CHS16GBK错误
  17. python dash 初探 --- k 线国内版
  18. git版本控制工具的使用(3)
  19. 乘风破浪:LeetCode真题_022_Generate Parentheses
  20. Splunk Enterprise architecture——转发器本质上是日志收集client附加负载均衡,indexer是分布式索引,外加一个集中式管理协调的中心节点

热门文章

  1. 杭电oj 1001
  2. ACM的奇计淫巧_bitset优化
  3. JZYZOJ1442 [noip2013]华容道 bfs 最短路 剪枝
  4. 【计算几何】【圆反演】hdu6097 Mindis
  5. 【二分】【半平面交】Gym - 101309J - Jungle Outpost
  6. 【数论】nefu119 组合素数
  7. 【递推+高精度】POJ2506-Tiling
  8. Educational Codeforces Round 9 E. Thief in a Shop dp fft
  9. 用js给循环的列表添加click事件
  10. 转载:ArcEngine二次开发界面基本设置