确定CodeIgniter控制器中的问题

时间:2011-05-04 02:37:40

标签: php codeigniter

我已经创建了一个基本控制器,我的所有控制器都扩展了......

class PublicController extends CI_Controller {
    private $js = array(),
            $css = array(),
            $templateVars = array();

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

        //register account
        $this->templateVars['account'] = ($this->account = $this->modelFactory('account'));

        // enable profiler for development
        if (ENVIRONMENT == 'development') {
            $this->output->enable_profiler(true);
            $this->addJs('jquery-min-1.5.2');
        } else {
            $this->addJs('http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js');
        }

        $this->addCss('base');
        $this->addJs('base');
    }


/**
 * Loads and initiates models
 */
protected function modelFactory ($model, $input = array()) {
    $this->load->model($model);

    $class = $model.'Model';
    return new $class($input);
}

这里的问题是我收到错误Fatal error: Maximum function nesting level of '100' reached, aborting! in C:\Program Files (x86)\EasyPHP-5.3.6.0\www\site.com\system\core\Common.php on line 328

当我注释掉$this->templateVars['account'] =行时,错误消失了......为什么这会循环?

2 个答案:

答案 0 :(得分:1)

作为一种解决方法,您可以将其添加为__construct方法中的第一个语句:

 global $onlyonce; if ($onlyonce++) return;

这将阻止创建控制器的多个实例。在不知道其余代码或CodeIgniter的情况下,可能会假设您的模型类本身实例化您的控制器。这反过来又创造了另一种模式。

xdebug探查器跟踪会告诉您更多信息。这个代码不足以告诉你确切的原因。

答案 1 :(得分:1)

@webnet在带有模块的CI(HMVC)中,我发生了同样的事情。我的控制器具有相同的模型文件名。更改名称就可以了。