【问题标题】:Codeigniter - set/check session in every controller functionCodeigniter - 在每个控制器功能中设置/检查会话
【发布时间】:2014-03-31 14:43:53
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

  • 你能不能在结构中加入一些逻辑?

标签: php codeigniter session


【解决方案1】:

你可以使用钩子: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'
            );

【讨论】:

  • Hooks 对我来说是新事物,但它似乎是完美的解决方案。非常感谢!
  • 你知道,钩子,在我与 CI 合作的这些年里,我没有进行太多探索。我实际上有一个基本控制器,它运行一个自定义构建 preDispatch 函数,它可以满足我的任何需求。但是,我认为我也应该考虑将一些逻辑放入钩子中。
猜你喜欢
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 2013-12-25
相关资源
最近更新 更多