Codeigniter - 在每个控制器功能中设置/检查会话

时间:2014-03-31 14:43:53

标签: php codeigniter session

我需要使用域并将其放入会话中,以从数据库中检索一些数据。我可以在我的默认控制器中执行此操作,没问题。 问题是人们直接链接到特定的控制器,如:www.mywebsite / mycontroller / myfunction。

当他们通过此链接进入网站时,我不会从域中设置会话,我会收到一些错误。

所以我的问题是: 有人有解决方案在每个域的每个功能中检查/设置此会话吗?

提前致谢!

1 个答案:

答案 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'
            );