2014-04-06 55 views
0

我希望每个控制器都有一个方法_render_page,它加载主模板并传递数据对象。Codeigniter为什么我无法从MY_Controller加载视图

我家的控制器类看起来是这样的:

class Home extends MY_Controller { 

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

    public function index() { 
     $data['title'] = "Site title"; 
     $data['the_view'] = 'welcome_message'; 
     $this->_render_page($this->layout, $data); 
     //$this->load->view($this->layout, $data); //This works ok.. 
    } 
} 

MY_controller类:

class MY_Controller extends CI_Controller { 

    public $layout; 
    public $viewdata; 

    public function __construct() { 
     parent::__construct(); 
     $this->layout = 'layout/master_template'; 
     $this->viewdata = null; 
    } 

    public function _render_page($view, $data=null, $render=false) { 
     $this->viewdata = $data; 
     $this->viewdata['the_view'] = $view; 
     if($this->ion_auth->logged_in()) { 
      $user_obj = $this->ion_auth->user()->row(); 
      $usr_data['username'] = $user_obj->username; 
      $user_obj = null; 
      $this->viewdata['usr_data'] = $usr_data; 
     } 
     $this->load->view($this->layout, $this->viewdata); //The code crashes here 
    } 
} 

当我浏览到家用控制器我什么也没得到,只是白色屏幕没有任何错误......

回答

0

看,你需要了解流程, 当你调用你的类的家,它扩展MY_Controller,CI会寻找MY_Controller,构造函数o ˚F您MY_controller被执行之后,CI开始执行您的家庭控制器的构造函数,然后回家控制器的默认方法, 所以为了让它工作,你需要调用_render_page() - 更改MY_Controller像 -

class MY_Controller extends CI_Controller { 

    public $layout; 
    public $viewdata; 

    public function __construct() { 
     parent::__construct(); 
     $this->layout = 'layout/master_template'; 
     $this->viewdata = null; 
     $this->_render_page($this->layout, $data=null, $render=false); // call your method 

    } 

    public function _render_page($view, $data=null, $render=false) { 
     $this->viewdata = $data; 
     $this->viewdata['the_view'] = $view; 
     if($this->ion_auth->logged_in()) { 
      $user_obj = $this->ion_auth->user()->row(); 
      $usr_data['username'] = $user_obj->username; 
      $user_obj = null; 
      $this->viewdata['usr_data'] = $usr_data; 
     } 
     $this->load->view($this->layout, $this->viewdata); //The code crashes here 
    } 
} 
+0

它也不起作用。为什么我会在父类构造函数中调用render方法? – user568021

+0

@ user568021纠正我,如果我错了,但如果你不调用该方法将如何执行? – sunny

+0

@ user568021你必须在某处调用它,也许在子类 – sunny

0

找到了解决方案:我以错误的方式调用_render_page。 取而代之的是:

$this->_render_page($this->layout, $data); 

我应该叫这样的:

$this->_render_page('welcome_message', $data); 

当然,这是这个函数是什么 - 加载母版页,并通过视图名称为$数据成员,所以主页面将知道要加载哪个视图。

+0

atlast你不得不调用_render_page()方法。那就是我说的! – sunny

+0

是的,但为什么在_constructor? – user568021

+0

因为构造函数会自动调用哪个inturn调用_render_page()函数,否则您必须在某处手动调用该方法! – sunny

相关问题