CodeIgniter:能否调用控制器get()方法并向多视图传递数据?
解决方案:复用get()方法生成多视图
当然可以实现!核心思路是让你的get()方法返回数据,而不是只在内部处理,这样其他方法就能调用它获取数据,再传递给不同视图。咱们一步步来改:
1. 修改get()方法,让它返回$data
原来的get()方法只是把数据存到$data里,但没有返回,所以其他方法拿不到。咱们给它加个返回值:
public function get() { $data['all'] = $this->genbamodel->getAll(); $data['delay'] = $this->genbamodel->getDelay(); $data['ontime'] = $this->genbamodel->getOntime(); // 你的其他$data赋值逻辑... return $data; // 把组装好的数据返回出去 }
2. 创建两个视图方法,调用get()并加载对应视图
现在你可以新建两个方法,分别处理经典视图和现代视图,它们都会调用get()获取数据,再传递给不同的视图文件:
// 加载经典视图 public function classic_view() { // 调用get()拿到所有数据 $data = $this->get(); // 把数据传给经典视图模板 $this->load->view('classic_view_template', $data); } // 加载现代视图 public function modern_view() { // 同样调用get()复用数据逻辑 $data = $this->get(); // 把数据传给现代视图模板 $this->load->view('modern_view_template', $data); }
3. (可选)保留get()方法的直接访问能力
如果你希望用户直接访问your-domain/controller/get时也能看到一个默认视图,可以在get()里加个判断:
public function get() { $data['all'] = $this->genbamodel->getAll(); $data['delay'] = $this->genbamodel->getDelay(); $data['ontime'] = $this->genbamodel->getOntime(); // 其他$data赋值... // 判断是否是直接访问该方法 if ($this->uri->segment(2) === 'get') { // 加载默认视图 $this->load->view('default_view_template', $data); } return $data; }
这样一来,你既实现了代码复用(不用在每个视图方法里重复写数据库查询),又能轻松生成两种不同风格的视图。
内容的提问来源于stack exchange,提问作者levia
相关产品推荐
相关产品推荐

