Я создал базовый контроллер, который расширяют все мои контроллеры …
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
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'] =
ошибка уходит … как это происходит?
В качестве обходного пути вы можете добавить это как первое утверждение в свой метод __construct:
global $onlyonce; if ($onlyonce++) return;
Это предотвратит создание нескольких экземпляров вашего контроллера. Не зная остальной части вашего кода или CodeIgniter, скорее всего, предполагается, что ваш класс модели сам создает экземпляр вашего контроллера. Это, в свою очередь, создает еще одну модель.
Трассировка профайлера xdebug расскажет вам больше. Это недостаточно для того, чтобы рассказать вам точную причину.
@webnet это случилось со мной в CI с модулями (HMVC). Мой контроллер имел то же имя файла модели. Изменение названия сделало трюк.