Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在CodeIgniter中加载包含会话数据的页眉、侧边栏等页面视图?_Php_Codeigniter_Session_Views - Fatal编程技术网

Php 如何在CodeIgniter中加载包含会话数据的页眉、侧边栏等页面视图?

Php 如何在CodeIgniter中加载包含会话数据的页眉、侧边栏等页面视图?,php,codeigniter,session,views,Php,Codeigniter,Session,Views,我用以下代码创建了一个名为template.php的视图 <?php $this->load->view('header'); $this->load->view($middle); $this->load->view('footer'); ?> 所以我的问题是如何传递会话数据,比如$data['session']=$this->session->all_userdata()到标题。 我可以通过在控制器中加载

我用以下代码创建了一个名为template.php的视图

<?php  
    $this->load->view('header');
    $this->load->view($middle);
    $this->load->view('footer');    
 ?>
所以我的问题是如何传递会话数据,比如
$data['session']=$this->session->all_userdata()到标题。

我可以通过在控制器中加载每个视图来传递会话数据。但是如何在模板文件中?

在任何视图中,您都应该能够使用会话帮助器

echo $this->session->userdata('foo');

就个人而言,我不会在视图中包含页眉和页脚。我如何实现这一点,是为了扩展控制器。像这样,

class MY_Controller extends CI_Controller {

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

    public function show_view($view, $data = array())
    {
        $this->load->view('header', $data);
        $this->load->view($view, $data);
        $this->load->view('footer', $data);
    }

}
现在,您可以加载任何视图,我们也将$data数组传递给页眉和页脚

$this->show_view('homepage', $data);

我希望这会有所帮助。

您可以使用一些技巧,比如从控制器传递数据数组,然后在template.php视图中再次传递内部数组

public function index()
{
    $data['middle'] = 'home';
    $this->load->view('template',array('data' => $data)); //trick to get whole data array in your template view.
}
然后在模板视图中

<?php  
    $this->load->view('header',$data);
    $this->load->view($middle);
    $this->load->view('footer');    
 ?>


为什么要这样做??如果可以从视图直接访问它。是的,可以访问,但我想在header视图中将会话数组传递给once。不在每个控制器功能中。但是我不知道该怎么做。您不需要传递任何内容。会话在视图中已经可用。仅将其作为数组传递给header视图并不能阻止它在其他视图中可用,也不能阻止它在任何可以访问codeigniter对象的地方可用(即$this)。限制它是没有意义的,因为它不是会话助手。它的会话对象本身可以从视图访问。它可以工作,但是否可以为标头视图传递一次数组,而不是在控制器的每个函数中传递。在这种情况下,我必须在控制器的每个函数中传递标题视图的数据数组。Craig的答案是更好的解决您的问题的方法。
<?php  
    $this->load->view('header',$data);
    $this->load->view($middle);
    $this->load->view('footer');    
 ?>