我需要使用域并将其放入会话中,以从数据库中检索一些数据。我可以在我的默认控制器中执行此操作,没问题。 问题是人们直接链接到特定的控制器,如:www.mywebsite / mycontroller / myfunction。
当他们通过此链接进入网站时,我不会从域中设置会话,我会收到一些错误。
所以我的问题是: 有人有解决方案在每个域的每个功能中检查/设置此会话吗?
提前致谢!
答案 0 :(得分:4)
您可以使用钩子:http://ellislab.com/codeigniter/user-guide/general/hooks.html
或者您可以将小脚本编码到控制器的构造中。
function __construct()
{
parent::__construct();
//Put your code here, you can also load your models and stuff
//$this->load->model("user_model","user");
//Code code code
}
以下是i18n(语言模块)的钩子示例 - 在applications / hooks / my_hook.php下创建一个文件
function setUserLang()
{
//Getting the language of the user
//If nothing was found, stick with English
$ci =& get_instance();
if(!$ci->session->userdata('lang')){
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
switch ($lang){
case "fr":
$ci->session->set_userdata('lang','french');
break;
case "en":
$ci->session->set_userdata('lang','english');
break;
default:
$ci->session->set_userdata('lang','english');
break;
}
}
}
然后转到applications / config / hooks.php并添加如下内容:
$hook['post_controller_constructor'][] = array(
'class' => '',
'function' => 'setUserLang',
'filename' => 'my_hook.php',
'filepath' => 'hooks'
);