我正在尝试确定从控制器中的同一方法调用多个视图的最佳实践。
控制器中最好是进行一次视图调用,然后让该视图调用所需的所有视图,或者在控制器中按顺序调用所需的所有视图?
示例:
function index(){
//set all data variables
//then send them to the view
$this->load->view($index_view, $data);
}
或
function index(){
//set variables
//then call each view
$this->load->view($header_view, $header_data);
$this->load->view($body_view, $body_data);
$this->load->view($footer_view, $footer_data);
Codeigniter指南显示了两种方式,但似乎没有建议最佳实践...是否有一个?
答案 0 :(得分:9)
我不喜欢在视图中包含页眉/页脚的方式,我不喜欢每次在每个Controller函数中加载页脚和页眉。
为了解决这个问题,我使用自己的视图显示功能扩展了Controller类。
<?php
// in application/libraries/MY_Controller.php
class MY_Controller extends Controller {
function _displayPage($page, $data = array()) {
$this->view->load('header', $data);
$this->view->load($page, $data);
$this->view->load('footer', $data);
}
}
?>
// in application/controllers/home.php
<?php
class Home extends MY_Controller {
function index() {
$this->_displayPage('home/index', array('title' => 'Home'));
}
}
?>
不确定这是否是CodeIgniter“最佳做法”,但这对我来说很有意义。
答案 1 :(得分:1)
我认为没有明确的答案。选择一个并坚持下去,保持一致非常重要。
无论如何,我更喜欢第二个。
答案 2 :(得分:1)
我会说控制器应该只显示一个视图。然后,如果它想要显示页眉,页脚,侧边栏或其他什么,它取决于视图。控制器不应该关心,它的工作是从模型中获取数据并将其交给视图。不确定视图是否应该有标题和页脚。
答案 3 :(得分:0)
同意ChristianDavén:它的观点/显示逻辑不是数据或业务/逻辑。基本上与使用php包括导航,页脚等片段相同,你只是嵌入标记。
答案 4 :(得分:0)
这是预期的行为。一旦设置了变量,它们就会在控制器类及其视图文件中可用。在$ this-&gt; load-&gt; view()中发送数组与在调用视图文件之前将数组直接发送到$ this-&gt; load-&gt; vars()相同。这简化了大多数人在控制器中使用多个视图的过程。如果您在一个控制器中使用多个视图文件并希望它们各自拥有自己的一组变量,则需要在视图调用之间手动清除$ this-&gt; load-&gt; _ci_cached_vars数组。
Loader类中的代码注释描述了另一种情况,说明了为什么这是所需的默认行为: