Как получить данные с крючка в Codeigniter?
Я использую hook
механизм в кодеигниторе. Вид крючка post_controller_constructor
,
Внутри класса есть один закрытый объект:
private $settings = array();
Этот объект заполняется после выполнения хука. Как я могу получить доступ к $settings
из библиотек CI и контроллеров?
Учебный класс:
<? class LCode_module
{
private $CI;
private $_default_lang = "en";
private $_sufixLangDefault = "_EN";
private $allowedLanguages = array();
private $_countryCurrent;
private $countries = array();
private $languages = array();
private $settings = array();
public function __construct()
{
$this->CI =& get_instance();
/* Load lists */
$this->CI->load->library('listdata');
$this->countries['country'] = $this->CI->listdata->country;
$this->countries['country_code'] = $this->CI->listdata->country_code;
$this->countries['country_lang'] = $this->CI->listdata->country_lang;
$this->languages = $this->CI->listdata->languages_sys;
}
public function route()
{
//Here I put data to $settings
}
}
метод route
метод init в hook
В конце конструктора:
/* Add object of class to GI instance */
$this->CI->LCode_module = new stdClass;
$this->CI->LCode_module->settings = &$this->settings;
После того, как я пытаюсь получить данные в контроллере:
$CI =& get_instance();
$c = $CI->LCode_module;
var_dump($c); // NULL
1 ответ
Используйте это как ваш класс, я создал статическую опцию, которую вы можете использовать, когда вам нужно:
<?php
class LCode_module
{
private $CI;
private $_default_lang = "en";
private $_sufixLangDefault = "_EN";
private $allowedLanguages = array();
private $_countryCurrent;
private $countries = array();
private $languages = array();
private $settings = array();
private static $instance;
private static $static_settings;
public function __construct()
{
$this->CI =& get_instance();
/* Load lists */
$this->CI->load->library('listdata');
$this->countries['country'] = $this->CI->listdata->country;
$this->countries['country_code'] = $this->CI->listdata->country_code;
$this->countries['country_lang'] = $this->CI->listdata->country_lang;
$this->languages = $this->CI->listdata->languages_sys;
self::$instance = &$this;
self::$static_settings = &$this->settings;
}
public function route()
{
//Here I put data to $settings
}
public static function getInstance(){
if (is_null(self::$instance)) { self::$instance = new self(); }
return self::$instance;
}
public static function settings($key = NULL){
$instance = self::getInstance();
if(is_null($key)) return $instance::$static_settings;
return (array_key_exists($key, $instance::$static_settings) ? $instance::$static_settings[$key] : null);
}
}
Тогда вы просто позвоните
LCode_module::settings()
когда вам нужно получить настройки
Это подразумевает параллельное использование синглтонов, что не совсем хорошая практика, но на данный момент оно должно сработать, поскольку хуки загружаются только один раз. Я уверен, что у CI есть способ выполнить это, но я сейчас рисую на этом бланк.