1

我正在尝试扩展 CI_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();
    }
}

应用程序/模型/模板.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->user 中。

4

2 回答 2

0

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

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

我相信你明白我的意思。

于 2013-06-05T06:55:31.717 回答
0

出于这个原因,有一个 config/autoload.php:

$autoload['model'] = array('YourModel');
于 2013-06-06T16:20:47.413 回答