Model view controller 在Codeigniter中显示多个视图的最佳实践是什么?
我试图确定从控制器中的同一方法调用多个视图的最佳实践 在控制器中,最好进行一次视图调用,然后让该视图调用它需要的所有视图,还是在控制器中按顺序调用您需要的所有视图 例如:Model view controller 在Codeigniter中显示多个视图的最佳实践是什么?,model-view-controller,codeigniter,view,Model View Controller,Codeigniter,View,我试图确定从控制器中的同一方法调用多个视图的最佳实践 在控制器中,最好进行一次视图调用,然后让该视图调用它需要的所有视图,还是在控制器中按顺序调用您需要的所有视图 例如: function index(){ //set all data variables //then send them to the view $this->load->view($index_view, $data); } 或 Codeigniter指南显示了这两种方法,但似乎没有建议最佳实践
function index(){
//set all data variables
//then send them to the view
$this->load->view($index_view, $data);
}
或
Codeigniter指南显示了这两种方法,但似乎没有建议最佳实践……有吗?我认为没有一个明确的答案。选择一个并坚持下去,保持一致性很重要
无论如何,我更喜欢第二个视图。我认为控制器应该只显示一个视图。然后由视图决定是否显示页眉、页脚、侧边栏或其他内容。控制器不必在意,它的工作是从模型中获取数据并将其传递给视图。不决定视图是否应该有页眉和页脚。同意Christian Davén的观点:它的视图/显示逻辑不是数据或业务/逻辑。本质上,这与在导航、页脚等代码段中使用php Include相同。您只是嵌入了标记。我不喜欢在视图中包含页眉/页脚的方式,我也不喜欢每次在每个控制器函数中加载页脚和页眉
<?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'));
}
}
?>
为了解决这个问题,我用自己的视图显示函数扩展了控制器类
<?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'));
}
}
?>
//在application/controllers/home.php中
不确定这是否是CodeIgniter的“最佳实践”,但对我来说是有意义的。这是预期的行为。一旦设置了变量,它们就可以在控制器类及其视图文件中使用。在$this->load->view()中发送数组与在调用视图文件之前直接将数组发送到$this->load->vars()相同。对于大多数在控制器中使用多个视图的人来说,这简化了工作。如果您在一个控制器中使用多个视图文件,并且希望每个视图文件独占地拥有自己的变量集,则需要在视图调用之间手动清除$this->load->\u ci\u cached\u vars数组 Loader类中的代码注释描述了另一种情况,说明了为什么这是期望的默认行为:
- 您可以使用专用的$this->load_vars()设置变量
- 函数或通过此函数的第二个参数。我们合并
- 并缓存这两种类型,以便嵌入其中的视图
- 其他视图可以访问这些变量