2011-12-29 59 views
2

我使用的是预控制器钩来检测和会话/的Cookie /浏览器郎检测设置站点语言..这样的答案: Codeigniter language访问在预控制器的CI会议笨钩

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

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

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

在此先感谢

回答

3

我用post_controller_constructor挂钩,而不是pre_controller解决了这个。在那个钩子中,会话是可访问的。因此,我在CI会话中设置了检测到的lang,并且正在相应地加载语言文件。

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

+1

我有同样的问题。我试图使用post_controller_constructor,但遇到了问题,因为我自动加载了一个必须在post_controller_constructor之前加载的语言文件。如果你使用“post_controller_constructor”钩子并在其中设置CI的语言,我的修复是加载我的“自动加载”语言文件在我的钩子的底部 – 2012-12-04 21:42:09

+0

,自动加载的语言文件将不会更改为该语言,因为它们之前已经加载你的钩子。托马斯修复是完美的。 – woheras 2015-12-24 12:25:38

-1

一个可行的办法是尝试从您的控制器预钩CI实例加载Session库。

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

函数get_instance()在预控制器钩子中不起作用..它不在CI中加载 – Nedal 2011-12-30 09:10:14

2

使用post_controller_constructor hock。它在控制器构造函数之后和控制器方法之前调用。它应该为你做诡计。对我来说它确实