视图
  1. 加载视图

    1.视图文件都放在application/views文件夹里面
    2.可以在任意地方使用下面的代码加载视图:
    示例如下:
                                                    Sr::view()->load($view_name, $data, $is_return);
                                            
    其中$view_name是视图文件名(不含后缀),$data是要传递到视图中的数据(关联数组),$is_return是返回视图内容。
    比如:
    视图文件application/views/index.php,在任意地方使用里就可以通过Sr::view()->load('index')加载视图。
    3.我们还提供加载主项目的视图,这个一般是在hmvc模块中使用到,用于复用主项目的视图文件,比如通用的header等。
    示例如下:
                                                    Sr::view()->loadParent($view_name, $data, $is_return);
                                            
    我们可以看到loadParent也是有三个参数,其实三个参数跟load用法一样。
    提示:
    了解详细的HMVC,点击进入HMVC
  2. 传递数据

    比如:
    数据$data = array('title' => '首页'),然后可以在加载视图的时候通过以下三种方法将数据传递给视图。

    1.直接data传递

    如下:
                                            Sr::view()->load('index', $data);
                                            

    2.直接set传递

    如下:
                                            Sr::view()->set($data)->load('index');
                                            //还有另一种方式如下
                                            Sr::view()->set('title', 'set首页')->load('index');
                                            //也是可以用以下方式
                                            Sr::view()->set('title', 'set首页');
                                            Sr::view()->load('index');
                                            

    3.直接add传递

    如下:
                                            Sr::view()->add($data)->load('index');
                                            //还有另一种方式如下
                                            Sr::view()->add('title', 'add首页')->load('index');
                                            //也是可以用以下方式
                                            Sr::view()->add('title', 'add首页');
                                            Sr::view()->load('index');
                                            

    4.set、add和直接传递data的区别

    1.setadd添加的数据在所有的视图中都可以使用,包括视图里面包含另外一个视图,
    传递data的数据只对当前的视图起作用,如果这个视图包含其它视图,包含其它视图是获取不到data里面的数据的。
    2.如果之前有数据存在,set方法会直接覆盖,add方法是不会覆盖。
    示例如下:
    2.1.新建视图文件application/views/test_load_data.php
    输入以下代码:
                                                    <?php echo $a; ?>
                                            
    2.2.新建控制器文件application/classes/Controller/Welcome.php
    输入以下代码:
                                            <?php
    
                                            class Controller_Welcome extends Soter_Controller {
    
                                                    public function do_set() {
                                                            $data = array('a' => 'vvv');
                                                            $data2 = array('a' => 333);
                                                            Sr::view()->set($data);
                                                            return Sr::view()->set($data2)->load('test_load_data');
                                                    }
    
                                                    public function do_add() {
                                                            $data = array('a' => 'vvv');
                                                            $data2 = array('a' => 333);
                                                            Sr::view()->add($data);
                                                            return Sr::view()->add($data2)->load('test_load_data');
                                                    }
                                            }
                                            
    浏览器访问:http://127.0.0.1/index.php/Welcome/set.do
    将会输出:333
    浏览器访问:http://127.0.0.1/index.php/Welcome/add.do
    将会输出:vvv
    我们可以看到上面结果是,set方法会直接覆盖之前数据,而add是不会覆盖之前数据。
    3.三种方法里面有同名的数据覆盖优先级是:data > set > add
    示例如下:
    3.1.新建视图文件application/views/test_data.php
    输入以下代码:
                                                    <?php echo $test; ?>
                                            
    3.2.新建控制器文件application/classes/Controller/Welcome.php
    输入以下代码:
                                            <?php
    
                                            class Controller_Welcome extends Soter_Controller {
    
                                                    public function do_view() {
                                                            $data = array('test' => 'add');
                                                            $data2 = array('test' => 'set');
                                                            $data3 = array('test' => 'data');
                                                            Sr::view()->add($data);
                                                            return Sr::view()->set($data2)->load('test_data', $data3);
                                                    }
                                            }
                                            
    浏览器访问:http://127.0.0.1/index.php/Welcome/view.do
    将会输出:data
    从上面我们可以看到结果是:
    data里面的同名数据会覆盖set或者add里面的同名数据。
  3. 返回视图内容

    默认情况下Sr::view()->load()会直接把生成的内容显示到浏览器。
    可以通过传递第三个参数改变这个默认行为,当第三个参数为true时,生成的视图内容会返回而不是显示在页面上。
    比如:$html = Sr::view()->load('index', null, true);
  4. 包含其它视图

    在视图中可以包含其他视图文件,视图文件里面可以通过Sr::view()->load($view_name)加载。
    比如:
    在视图index.php里面有如下内容:
                                                    <?php Sr::view()->load('common/header'); ?>
                                            
    那么这个就是包含视图目录下面的common文件夹里面的header.php视图文件。
  5. 创建自己的视图

    下面我们自定义一个加载视图
    1.新建视图文件application/views/welcome.php
    输入以下代码:
                                                    <?php echo $test; ?>
                                            
    2.新建控制器文件application/classes/Controller/Welcome.php
    输入以下代码:
                                                    <?php
    
                                                    class Controller_Welcome extends Soter_Controller {
    
                                                            public function do_view() {
                                                                    $data = array('test' => '测试内容');
                                                                    return Sr::view()->load('welcome', $data);
                                                            }
                                                    }  
                                            
    3.浏览器访问:http://127.0.0.1/index.php/Welcome/view.do
    将输出:测试内容
    提示:
    了解详细的控制器,点击进入控制器