• 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。

  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    剑指offer-栈的压入、弹出序列
    剑指offer-包含min函数的栈
    图-Dijkster最短路径
    剑指offer-顺时针打印矩阵
    二叉树的镜像
    剑指offer-树的子结构
  • 原文地址:https://www.cnblogs.com/pied/p/3532456.html
Copyright © 2020-2023  润新知