2016-04-02 5 views
0

У меня есть, может быть, глупый вопрос - но это из-за моего недостатка знаний. Мне интересно, могу ли я выполнить следующий результат.Переменные обмена Codeigniter

Контроллер

class Building extends CI_Controller { 

function __construct(){  
    parent::__construct(); 
    $this->load->model('buildings/buildings_model' , 'buildings'); 
    $is_locked = $this->buildings->_lock; 
} 

    // generic building overview. Includes data like name and location 
    public function index($obj) 
    { 

     // the $obj param is the segment id from router 
    } 

    public function details($obj) 
    { 
     // here I would get some more specific data 
    } 

    public function associates($obj) 
    { 
     // list of things that the object is associated 
    } 

} 

Модель

class buildings_model extends MY_Model{ 
    public $_lock = false; 
    function __construct() { 
     parent::__construct(); 
     // example pseudo code 
     // db query select lock from obj where id = 1 for example 
     // if lock == 1 { $this->_lock = TRUE; } 
    } 
} 

А теперь вопрос .. я назначил глобальную переменную public $_lock = false; в model так он доступен во все объеме controller. Но каждый раз, когда я обращаюсь к views, model constructor каждый раз делает запрос, чтобы проверить, заблокирован ли объект. Как правило, мне нужен глобальный флаг, если здание заблокировано, но генерируется не каждый просмотр страницы.

+0

хранить его в сеансе и проверить комплект или нет. –

+0

хорошо, что-то рассмотреть, но будет ждать и других идей, пользователь может получить доступ к нескольким зданиям за это время, поэтому может быть много информации, хранящейся в сеансе. –

+0

Я думаю, что db - лучшее место для хранения флага. u может проверить, истинно ли это в самом конструкторе и вызвать die/exit там –

ответ

0

Вы можете сделать что-то вроде MY_Controller и вызовите запрос внутри это конструктор, а затем продлить каждый контроллер вам нужно с MY_Controller подобным образом:

class MY_Controller extends CI_Controller { 

public $_lock = false; 

    function __construct() 
    { 
     parent::__construct(); 
     // example pseudo code 
     // db query select lock from obj where id = 1 for example 
     // if lock == 1 { $this->_lock = TRUE; } 
    } 
} 

чем внутри контроллера:

class Building extends MY_Controller { 

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

Также имейте в виду, что соглашения php и codeigniter говорят, что подчеркивание в начале переменной используется для частных переменных.

+0

Хотя соглашение предусматривает, что переменные '$ _' являются частными, вы должны изменить свой код, чтобы установить' $ _lock' как защищенный, в противном случае это ошибка, ожидающая появления. – Technoh

+0

Я не хотел менять весь код сразу, оставляя переменную как я тоже хотел обратить внимание на некоторые проблемы. – cssBlaster21895

Смежные вопросы