Переменные Codeigniter из конструктора не определены - PullRequest
3 голосов
/ 09 января 2011

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

Переменная $user_id = tank_auth->get_user_id(); получает идентификатор пользователя из сеанса. Я хочу вытащить записи, где user_id = $user_id.

Из того, что я понял, конструкторы могут загружать переменные каждый раз, когда класс инициируется. Вроде как глобальные переменные. Итак, я решил установить свой $user_id в конструкторе модели, чтобы я мог использовать его для нескольких функций в классе модели.

class My_model extends Model {

    function My_model() 
    {
        parent::Model();
        $user_id = $this->tank_auth->get_user_id();     
    }

        function posts_read() //gets db records for the logged in user
    {       
        $this->db->where('user_id', $user_id);
        $query = $this->db->get('posts');
        return $query->result();
    }
}

Затем я загружаю модель, создаю массив в своем контроллере и отправляю данные в мое представление, где у меня есть цикл foreach.

При тестировании я получаю

Сообщение: неопределенная переменная: user_id

в моей модели. Однако это работает, если я определяю переменную $user_id в своей функции posts_read, но я не хочу определять ее в каждой функции, которая нуждается в этом.

Что я здесь не так делаю?

Ответы [ 2 ]

10 голосов
/ 09 января 2011

Проблема переменной области.Вы должны создать переменные уровня класса, чтобы они были доступны и в других функциях, например:

class My_model extends Model {
    private $user_id = null;

    function My_model() 
    {
        parent::Model();
        $this->user_id = $this->tank_auth->get_user_id();     
    }

        function posts_read() //gets db records for the logged in user
    {       
        $this->db->where('user_id', $this->user_id);
        $query = $this->db->get('posts');
        return $query->result();
    }
}

Обратите внимание на добавление $user_id после объявления класса, которое позже используется с $this->user_id:)

5 голосов
/ 09 января 2011

Потяните его в глобальную сферу

class My_model extends Model {

    $user_id = 0;

    function My_model() {
        parent::Model();
        $this->user_id = $this->tank_auth->get_user_id();     
    }

    function posts_read() //gets db records for the logged in user {       
        $this->db->where('user_id', $this->user_id);
        $query = $this->db->get('posts');
        return $query->result();
    }
}
...