Конструктор Codeigniter - загрузка базы данных + установка переменных - PullRequest
0 голосов
/ 22 ноября 2011

Я хотел бы знать, как я могу добавить следующий код в мой конструктор codeigniter:

$this->load->model('members_model');
            $member = $this->session->userdata('email_address');
            $viewdata['pagecontent'] = $this->members_model->get_profile($member);

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

Пока это конструктор:

public function __construct(){
        parent::__construct();  
        Accesscontrol_helper::is_logged_in_super_user();    

        $this->load->model('members_model');
        $member = $this->session->userdata('email_address');
        $viewdata['pagecontent'] = $this->members_model->get_profile($member);
    }

Почему вышеуказанный код не работает? Требуется ли конструкторам другой код?

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Похоже, у вас проблемы с областью действия.Поскольку переменные объявляются внутри метода __construct(), это единственный метод, который может ссылаться на них.Вам нужно было бы сделать их переменными класса, чтобы иметь доступ к ним во всех ваших методах.

Попробуйте что-то вроде этого:

class Your_class extends CI_Controller {

    protected $member;
    protected $viewdata;

    public function __construct()
    {
        parent::__construct();

        Accesscontrol_helper::is_logged_in_super_user();    

        $this->load->model('members_model');

        $this->member = $this->session->userdata('email_address');
        $this->viewdata['pagecontent'] = $this->members_model->get_profile($member);
    }
}

Тогда вы можете ссылаться на $member и $viewdata в других ваших методах, подобных этому: $this->member

Возможно, вы захотите настроить это немного по-другому, но, надеюсь, вы получите представление о переменных и области действия.

1 голос
/ 22 ноября 2011

Конструктор работает в этом смысле, как и все другие методы (и подобные функции), поэтому ваши переменные подчиняются переменной области действия.

Do:

class Mycontroller extends CI_Controller {

public $viewdata = array();

    function __construct()
    {
      parent::__construct();
      Accesscontrol_helper::is_logged_in_super_user();
      $this->load->model('members_model');
      // $this->load->library('session');
      // $this->load->database();
      // ^- if not already autoloaded
      $member = $this->session->userdata('email_address');
      $this->viewdata['pagecontent'] = $this->members_model->get_profile($member);
    }
}

Затем вметоды вашего другого контроллера, вы просто вызываете свойство класса $ this-> viewdata, например.

function index()
{
  $this->load->view('myview',$this->viewdata);
}

и получаете к нему доступ, в myview.php:

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