如何将模型方法加载到CodeIgniter中的控制器构造函数中?

时间:2013-06-05 05:08:25

标签: codeigniter model constructor

我正在尝试扩展CI_Controller类以加载我的全局页面头文件,因此我不必在每个控制器方法的开头加载它。它似乎没有工作。我知道Controller扩展本身是有效的...如果我从构造函数中删除模型方法的调用并从我的控制器方法加载它,控制器扩展的其余部分工作正常。但是当我从控制器扩展的构造函数中加载模型方法时,我得到一个空白页面(我还没有生成主要内容)。

有什么想法吗?

应用/核心/ MY_Controller.php

<?php
class MY_Controller extends CI_Controller {

    var $user = array();

    function __construct(){

        parent::__construct();
        $this->load->model('member');

        if($this->session->userdata('member_id')){

            $this->member->get_info($this->session->userdata('member_id'));
            $this->user = $this->member->info;
            $this->member->update_activity($this->session->userdata('member_id'));

        } else {

            $this->load->helper('cookie');

            if(get_cookie('Teacher Tools Member Cookie')){

                $this->member->auto_login(get_cookie('Teacher Tools Member Cookie'));

            } else {

                $this->user = $this->member->default_info();
            }

        }

        $this->load->model('template');
        $this->template->overall_header();
    }
}

应用/模型/的template.php

<?php

class Template extends MY_Model {

    function __construct(){

    parent::__construct();

}

function overall_header($title = 'Home'){

    $data = array(
        'BASE_URL' => base_url(),
        'MAIN_NAVIGATION' => $this->main_navigation(),
        'TOOLBAR' => $this->toolbar()
    );

    return $this->parser->parse('overall_header.tpl', $data);

}

MY_Model是CI_Model类的扩展,用于将成员信息加载到$ this-&gt; user。

2 个答案:

答案 0 :(得分:0)

我认为响应生成是在Controller的方法中完成的,并且您可能拥有的所有HTML片段都会粘在那里。因此,如果您正在调用/controller/method_a,那么method_a将负责返回响应,而在构造函数中则无法设置响应。

我同意你在构造函数中设置一次重要数据,这样你就不必在每个方法中反复这样做。我认为您应该将输出分配给某个控制器级variable,然后在Controller的方法中使用variable

我相信你明白了我的意思。

答案 1 :(得分:0)

因此有一个config / autoload.php:

$autoload['model'] = array('YourModel');