Codeigniter не загружает суперобъект CI

Я пытаюсь написать хук для своего приложения Codeigniter.

Я пытаюсь поймать session в hook.

Вот мой код для загрузки хука:

$hook['pre_controller'] = array(
  'function' => 'getNav',
  'filename' => 'LoadNav.php',
  'filepath' => 'hooks'
);

И вот код, который я пытаюсь загрузить в хук:

function getNav()
{
     $CI =& get_instance();
     $level = $CI->session->userdata('level');
}

Постоянно выдает ошибку следующего содержания:

A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object
Filename: hooks/LoadNav.php
Line Number: 7

Есть идеи, что я делаю неправильно? Похоже, что метод get_instance не работает?

Любая помощь будет оценена по достоинству, спасибо

Ален


person criticerz    schedule 20.04.2011    source источник
comment
Попробуйте var_dumpировать переменную $CI   -  person JohnP    schedule 20.04.2011
comment
Какую версию PHP вы используете? Что-то вроде $CI =& get_instance(); мне кажется кодом PHP4   -  person afuzzyllama    schedule 20.04.2011
comment
@afuzzyllama: Как это выглядит как код PHP4? Он присваивает переменную по ссылке на вывод get_instance() (функция). Что такое PHP4 об этом?   -  person Wesley Murch    schedule 20.04.2011
comment
Моя ошибка, я думал, что это было что-то вроде этого, но это не так... php.net/manual/en/language.operators.assignment.php   -  person afuzzyllama    schedule 20.04.2011


Ответы (1)


Вы не можете получить доступ к экземпляру $CI в хуке pre_controller - согласно документам:

ловушка pre_controller Вызывается непосредственно перед вызовом любого из ваших контроллеров. Все базовые классы, маршрутизация и проверки безопасности были выполнены.

Именно ЭК Controller разрешает доступ к get_instance(). Пока контроллер не создан, получать нечего.

Вместо этого попробуйте post_controller_constructor и посмотрите, даст ли это желаемые результаты.

In system/Core/Controller.php:

class CI_Controller {

// <snip>

    public static function &get_instance()
    {
        return self::$instance;
    }

}
    // END Controller class
person Ross    schedule 20.04.2011
comment
Я понял. Потом вернулся и увидел это. Идеальный ответ! Спасибо! - person criticerz; 20.04.2011