CodeIgniter/PHP - 从视图中调用视图

Jac*_*ack 4 php codeigniter views

基本上我的webapp我试图组织它好一点.就目前而言,每次我想加载页面时,我都必须从我的控制器中执行此操作:

        $this->load->view('subviews/template/headerview');
    $this->load->view('subviews/template/menuview');
    $this->load->view('The-View-I-Want-To-Load');
    $this->load->view('subviews/template/sidebar');
    $this->load->view('subviews/template/footerview'); 
Run Code Online (Sandbox Code Playgroud)

你可以说它并不是非常有效.

所以我想我会创建一个'主'视图 - 它叫做template.php.这是模板视图的内容:

<?php
    $view = $data['view'];

        $this->load->view('subviews/template/headerview');
        $this->load->view('subviews/template/menuview');
        $this->load->view($view);
        $this->load->view('subviews/template/sidebar');
        $this->load->view('subviews/template/footerview');
?>
Run Code Online (Sandbox Code Playgroud)

然后我想我可以从这样的控制器调用它:

    $data['view'] = 'homecontent';
    $this->load->view('template',$data);
Run Code Online (Sandbox Code Playgroud)

不幸的是,我根本无法做到这一点.有没有人可以解决这个问题或修复我可以实施的方法?我已经尝试在template.php中将"s"和's'放在$ view周围,但这没什么区别.通常的错误是"未定义的变量:数据"或"无法加载视图:$ view.php"等.

谢谢大家!

插口

dd0*_*d0x 13

我相信你所拥有的:

$view = $data['view'];

$this->load->view('subviews/template/headerview');
$this->load->view('subviews/template/menuview');
$this->load->view($view);
$this->load->view('subviews/template/sidebar');
$this->load->view('subviews/template/footerview');
Run Code Online (Sandbox Code Playgroud)

你需要摆脱这条线:

$view = $data['view'];
Run Code Online (Sandbox Code Playgroud)

这是因为当从控制器传递数组时,视图上的变量只能通过$ view而不是$ data ['view']访问.


Sta*_*ndi 6

这里有很多建议http://codeigniter.com/forums/viewthread/88335/

我选择了这个方法:控制器类:

public function __construct() 
{
    parent::__construct();

    $this->load->vars(array(
        'header' => 'partials/header',
        'footer' => 'partials/footer',
    ));
}

public function index()
{       
    $data['page_title'] = 'Page specific title';        
    $this->load->view('my-view', $data);
}
Run Code Online (Sandbox Code Playgroud)

视图:

<?php $this->load->view($header, compact('page_title')); ?>
... blah blah ...
<?php $this->load->view($footer); ?>
Run Code Online (Sandbox Code Playgroud)

必须在视图中加载视图并传递子视图可能使用的任何变量,这远非理想.能够在Laravel中使用像Action Filters这样的东西可能会更好.