传递数据
比如:
数据$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.set
和add
添加的数据在所有的视图中都可以使用,包括视图里面包含另外一个视图,
传递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
里面的同名数据。