Определить проблему в контроллере CodeIgniter - PullRequest
1 голос
/ 04 мая 2011

Я создал базовый контроллер, который расширяет все мои контроллеры ...

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 ]

1 голос
/ 16 октября 2013

@ webnet, то же самое произошло со мной в CI с модулями (HMVC). У моего контроллера было то же имя файла модели. Смена имени сделала свое дело.

1 голос
/ 04 мая 2011

В качестве обходного пути вы можете добавить это в качестве первого утверждения в вашем методе __construct:

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

Это предотвратит создание нескольких экземпляров вашего контроллера. Не зная остальной части вашего кода или CodeIgniter, вполне вероятно, что ваш класс модели сам создает экземпляр вашего контроллера. Который в свою очередь создает другую модель.

Трассировка профилировщика xdebug расскажет вам больше. Этого кода недостаточно, чтобы сообщить вам точную причину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...