Можно ли использовать библиотеки из ловушки классов?

Я использую хуки для вызова класса, который выполняется до вызова контроллеров.

$hook['pre_controller'] = array(
    'class' => 'CargarInformacion',
    'function' => 'obtenerInfo',
    'filename' => 'CargarInformacion.php',
    'filepath' => 'hooks',
    'params' => ''
    );

Это класс

class CargarInformacion 
{
    function obtenerInfo()
    {
        $ci = &get_instance();
        $informacion = $ci->db->get('sitio', 1)->row();
    }
}

Но я всегда получаю ту же ошибку

Попытка получить свойство необъекта

Я знаю, что получены тысячи ответов, но до сих пор я не нашел правильный.

1 ответ

Решение

Как указано в документе codeigniter,

pre_controller

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

Вот почему вы не можете получить доступ к ссылке на суперобъект CI в pre_controller крюк. Вы можете проверить это, сделав так.

$hook['pre_controller'] = array(
    'class' => 'CargarInformacion',
    'function' => 'obtenerInfo',
    'filename' => 'CargarInformacion.php',
    'filepath' => 'hooks',
    'params' => 'pre'
);

$hook['post_controller_constructor'] = array(
    'class' => 'CargarInformation',
    'function' => 'obtenerInfo',
    'filename' => 'CargarInformation.php',
    'filepath' => 'hooks',
    'params' => 'post'
);

В CargarInformation.php,

class CargarInformation  {
    function __construct($foo = null) {
        $this->CI =& get_instance();
    }

    function obtenerInfo($param)
    {
        echo $param;
        echo "<pre>";
        print_r($this->CI);
        echo "</pre>";
    }
}

Поэтому попробуйте использовать post_controller_constructor вместо этого, если вы хотите получить доступ к ссылке на суперобъект CI, но до того, как произойдет какой-либо вызов контроллера.

Надеюсь, это будет полезно для вас.

Другие вопросы по тегам