Глобальные переменные в CodeIgniter не работают - PullRequest
3 голосов
/ 20 сентября 2011

Я хочу создать глобальные переменные в CodeIgniter, создав собственную библиотеку и файл конфигурации.Это то, что я написал в моем библиотечном файле, скажем, globalvars.php.Я поместил его в /application/libraries.

class Globalvars{

    function __construct($config = array()) 
    {
        foreach ($config as $key => $value) {
            $data[$key] = $value;
        }
        $CI =& get_instance();
        $CI->load->library('session');
        $CI->load->vars($data); 
    }
}

Я хочу, чтобы идентификатор пользователя, сохраненный в сеансе, был доступен в глобальной переменной, поэтому я написал это в своем конфигурационном файле.Он также называется globalvars.php.Он находится в каталоге / application / config.

$config['user']=$this->session->userdata('id');

Затем я проверяю, работает ли он, записав его в мой контроллер таким образом.

echo $data['user'];

Но я получаю эту ошибку вbrowser

Message: Undefined property: CI_Loader::$session
Filename: config/globalvars.php

Кажется, что функции сеанса еще не определены.Как я могу заставить это работать?Что я здесь пропустил?Любая помощь будет оценена.

Ответы [ 2 ]

5 голосов
/ 20 сентября 2011

Вы не можете использовать библиотеку session в файле config.

Файлы config загружаются раньше любых библиотек, поэтому $this->session не определено.

3 голосов
/ 20 сентября 2011

config.php должен быть загружен для инициализации класса Session, так как он считывает настройки из этого файла.

Много проблем с этим типом вещи (установка некоторого "глобального"«данные» можно разрешить с помощью базового контроллера и расширения его в ваших контроллерах.

// core/MY_Controller.php
MY_Controller extends CI_Controller {

    function __construct()
    {
        parent::__construct(); // Now the Session class should be loaded
        // set config items here 
    }
}

«Обычные» контроллеры теперь будут расширяться MY_Controller, чтобы воспользоваться этим преимуществом.

См.: http://codeigniter.com/user_guide/general/core_classes.html для получения более подробной информации.

Кроме того, когда вы load->vars(), они доступны только для слоя представления, он не создает глобальную переменную с именем $data, как вам кажетсяпытаться получить доступ.Если вы сделаете это:

$this->load->vars(array('user' => '1'));

Вы получите доступ к нему в файле, загруженном $this->load->view() следующим образом:

echo $user;  // outputs "1"

См .: http://codeigniter.com/user_guide/libraries/loader.html

$ this-> load-> vars ($ array)

Эта функция принимает в качестве входных данных ассоциативный массив и генерирует переменные, используя функцию извлечения PHP.Эта функция выдает тот же результат, что и второй параметр функции $this->load->view(), описанной выше.Причина, по которой вы можете использовать эту функцию независимо, заключается в том, что вы хотите установить некоторые глобальные переменные в конструкторе вашего контроллера и сделать их доступными в любом файле просмотра , загруженном из любой функции.Вы можете сделать несколько вызовов этой функции.Данные кешируются и объединяются в один массив для преобразования в переменные.

Я скажу, что для опытного пользователя Codeigniter концепция класса «глобальные переменные» немного сложна и, вероятно, не нужна,особенно когда уже так легко получить и установить элементы конфигурации.Вы можете определенно столкнуться с некоторыми запутанными проблемами и конфликтами имен переменных с помощью этого метода (предварительная загрузка большого количества переменных представления при каждом запросе).

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