CakePHP控制器向视图传值总结

来源:互联网 发布:化境云计算 编辑:程序博客网 时间:2024/06/06 08:35
原文发表于 CakePHP中国社区  http://cakephp.cn/forum.php?mod=viewthread&tid=638&extra=page%3D1 

1. 使用Controller::set()方法,给视图传值。如 
1//控制器中
2public function index() {
3        $this->set('hello''hello world');
4}
5 
6 
7//视图index.ctp中
8echo $hello;  //输出'hello world'



2. 给视图传多个值 
01//控制器中
02public function index() {
03        $this->set('name''CakePHP中国');
04        $this->set('url''http://cakephp.cn');
05        $this->set('email''admin@cakephp.cn');
06}
07 
08 
09//视图index.ctp中
10echo $name;  //输出'CakePHP中国'
11echo $url;  //输出'http://cakephp.cn'
12echo $email;  //输出'admin@cakephp.cn'



上面的方法比较麻烦,也可以用以下方法: 
方法1: 
01//控制器中
02public function index() {
03        $this->set('configs'array('name'=>'CakePHP中国','url'=>'http://cakephp.cn''email'=>'admin@cakephp.cn'));
04}
05 
06 
07//视图index.ctp中
08echo $configs['name'];  //输出'CakePHP中国'
09echo $configs['url'];  //输出'http://cakephp.cn'
10echo $configs['email'];  //输出'admin@cakephp.cn'



方法2: 
01//控制器中
02public function index() {
03        var $name  'CakePHP中国';
04        var $url   'http://cakephp.cn';
05        var $email 'admin@cakephp.cn';
06        $this->set(compact('name','url','email'));
07}
08 
09 
10//视图index.ctp中
11echo $name;  //输出'CakePHP中国'
12echo $url;  //输出'http://cakephp.cn'
13echo $email;  //输出'admin@cakephp.cn'



3. 控制器中把值设到$this->request->data中,视图中能直接取得$this->reqeust->data的值。这时就不需要使用Controller::set()方法了。 
01//控制器中
02public function index() {
03        $this->request->data = array('name'=>'CakePHP中国','url'=>'http://cakephp.cn''email'=>'admin@cakephp.cn');
04}
05 
06 
07//视图index.ctp中
08echo $this->request->data['name'];  //输出'CakePHP中国'
09echo $this->request->data['url'];  //输出'http://cakephp.cn'
10echo $this->request->data['email'];  //输出'admin@cakephp.cn'



使用$this->request->data的另外一个好处,就是能够自动填充到视图中Form的对应字段中 
01//控制器中
02public function edit($id) {
03        $this->request->data = $this->User->read(null,$id);
04}
05 
06 
07/*
08假设返回结果为
09array('User'=>array('name'=>'cakephp中国', 'email'=>'admin@cakephp.cn', 'qq'=>'88888'));
10*/
11 
12 
13//视图edit.ctp中
14echo $this->Form->create('User',array('type'=>'post'));
15echo $this->Form->input('name');  //显示'cakephp中国'
16echo $this->Form->input('email');  //显示'admin@cakephp.cn'
17echo $this->Form->input('qq'); //显示'88888'
18echo $this->Form->end('保存');