我已经创建了一个基本控制器,我的所有控制器都扩展了......
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'] =
行时,错误消失了......为什么这会循环?
答案 0 :(得分:1)
作为一种解决方法,您可以将其添加为__construct方法中的第一个语句:
global $onlyonce; if ($onlyonce++) return;
这将阻止创建控制器的多个实例。在不知道其余代码或CodeIgniter的情况下,可能会假设您的模型类本身实例化您的控制器。这反过来又创造了另一种模式。
xdebug探查器跟踪会告诉您更多信息。这个代码不足以告诉你确切的原因。
答案 1 :(得分:1)
@webnet在带有模块的CI(HMVC)中,我发生了同样的事情。我的控制器具有相同的模型文件名。更改名称就可以了。