【问题标题】:access the CI session in a pre controller codeigniter hook在预控制器 codeigniter 挂钩中访问 CI 会话
【发布时间】:2012-01-30 05:50:54
【问题描述】:

我正在使用预控制器挂钩从会话/cookie/浏览器语言检测中检测和设置站点语言.. 类似这样的答案: Codeigniter language

我还使用著名的 Tank Auth 库来管理用户,并使用 codeigniter Session 类来存储和管理登录时的用户会话。每个用户都可以指定他想要的界面语言并将其存储在数据库中未来的登录。每次登录时,语言信息都会从数据库复制到会话。

问题是:我无法从钩子内部检查用户会话。我怎么知道(如果是登录用户)他的会话是否有 lang 信息?

我不确定钩子方法是否是处理登录用户会话的最佳方法。如果我有更好的方法,请告诉我。

提前致谢

【问题讨论】:

    标签: php codeigniter session internationalization multilingual


    【解决方案1】:

    我通过使用 post_controller_constructor 挂钩而不是 pre_controller 解决了这个问题。在那个钩子中,会话是可访问的。所以我在 CI 会话中设置检测到的语言,并相应地加载语言文件。

    我不确定这是否是最好的方法,但如果您不在任何控制器构造函数中使用 lang 库,它就可以正常工作。

    【讨论】:

    • 我遇到了同样的问题。我尝试使用 post_controller_constructor 但遇到了问题,因为我正在自动加载必须在 post_controller_constructor 之前加载的语言文件。我的解决方法是在我的钩子底部加载我的“自动加载”语言文件
    • 如果你使用 "post_controller_constructor" 钩子并在那里设置 CI 的语言,自动加载的语言文件将不会更改为该语言,因为它们已经在你的钩子之前加载。托马斯修复是完美的。
    【解决方案2】:

    使用 post_controller_constructor 飞节。它在控制器构造函数之后和控制器方法之前调用。它应该为您解决问题。对我来说确实如此

    【讨论】:

      【解决方案3】:

      一种可能的解决方案是尝试从您的预控制器挂钩将会话库加载到 CI 实例中。

      $CI = &get_instance();   
      $CI->load->library('session');
      // --- Then ---
      $var = $CI->session->userdata('$the_variable_youre_checking');
      

      【讨论】:

      • 函数 get_instance() 在预控制器钩子中不起作用.. 它尚未在 CI 中加载
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 2012-12-08
      • 2018-07-21
      相关资源
      最近更新 更多