CI控制器调用内部方法并载入相应模板的做法

当我打开链接:http://localhost/3g/index/open/a/b?from=timeline 后,判断链接中的from是否等于timeline,如果等于timeline,那么就调用控制器内部的timeline方法,并载入timeline.php这个模板。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Index extends CI_Controller {  
function __construct() {
parent::__construct();
}

public function open($a=0,$b=0) {
if ($_GET['from'] == 'timeline') {
$this -> timeline($a);
die;
} else {
$data['b'] = $b;
$this -> load -> view('3g/index/open',$data);
}
}
public function timeline($a=0) {
$data['a'] = $a;
$this -> load -> view('3g/index/timeline',$data);
}
}

此时输出的页面一片空白,并没有载入timeline.php这个模板,这是因为$this -> timeline($a);的后面加了die;的缘故。
解决方法一:去掉die;

解决方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Index extends CI_Controller {  
function __construct() {
parent::__construct();
}

public function open($a=0,$b=0) {
if ($_GET['from'] == 'timeline') {
$this -> timeline($a); //也可使用self::timeline($a);
die;
} else {
$data['b'] = $b;
$this -> load -> view('3g/index/open',$data);
}
}
public function timeline($a=0) {
$data['a'] = $a;
echo $this -> load -> view('3g/index/timeline',$data,true);
die;
}
}

获取视图内容

view函数第三个可选参数可以改变函数的行为,让数据作为字符串返回而不是发送到浏览器。如果想用其它方式对数据进一步处理,这样做很有用。如果将view第三个参数设置为true(布尔)则函数返回数据。view函数缺省行为是 false, 将数据发送到浏览器。如果想返回数据,记得将它赋到一个变量中:
$string = $this->load->view('myfile','',true);

例子:有些情况下,你并不想直接输出视图,而是仅仅想得到视图的内容以备后用。那么可以参考如下代码。

1
2
3
4
5
6
7
8
9
10
<?php 
class Blog extends CI_Controller {
function index() {
$data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
$buffer = $this->load->view('blogview', $data, true);
}
}
?>

view方法中的第三个参数表示不输出视图,而只是将结果返回给一个变量。