Ion Auth检查从MY_L​​oader类登录

时间:2014-03-04 18:21:24

标签: php codeigniter ion-auth

这可能是一个基本的Codeigniter(或php)问题,但我正在尝试检查用户是否使用Ion Auth登录每个页面调用,以便我可以提供“登录”或“注销” '链接。

我从MY_L​​oader类加载了我的标题,内容和页脚视图,并尝试使用$this->ion_auth->logged_in()检查用户是否已登录,但我收到此php错误,

  

PHP错误:未定义的属性:MY_Loader :: $ ion_auth

这是MY_Loader.php:

<?php

/**
 * /application/core/MY_Loader.php
 *
 */
class MY_Loader extends CI_Loader {
    public function template_main($template_name, $vars = array(), $return = FALSE)
    {
        $vars['signin'] = $this->ion_auth->logged_in() ? 'signout' : 'signin';
        $vars['signin_text'] = $this->ion_auth->logged_in() ? 'Sign-out' : 'Sign-in';
        $content  = $this->view('frontend/main_template/header', $vars, $return);
        $content .= $this->view($template_name, $vars, $return);
        $content .= $this->view('frontend/main_template/footer', $vars, $return);

        if ($return)
        {
            return $content;
        }
    }
}

/* End of MY_Loader.php */
/* Location: ./application/core/MY_Loader.php */

我正在自动加载ion_auth库。如何调用MY_Loader类中的logged-in()函数?

2 个答案:

答案 0 :(得分:2)

自动加载的文件可能尚未加载。将$ this-&gt; load-&gt; library('ion_auth')添加到方法的顶部。

答案 1 :(得分:0)

编辑:我误解了这个问题,很抱歉。但是我将为未来的读者留下答案,这些读者可能会觉得它很有用。尝试使用钩子来解决问题。

我的建议是简单地检查用户是否从控制器的构造方法登录并将结果保存到类变量中。

$this->user_logged_in = (bool)$this->ion_auth->logged_in();

这将允许您为每个控制器调用一次,而不是每次调用一次(更容易维护,并保持基本ACL /逻辑不在视图中)。然后,您需要做的就是将变量传递给您的视图。

$data['user_logged_in'] = $this->user_logged_in;
$this->load->view('view_file_name', $data);

当我希望整个应用程序需要登录时,我喜欢做的是通过CodeIgniter的hooks调用这些类型的检查。在这种情况下,可能是post_controller_constructor钩子,这样它就会被自动调用(只需确保过滤掉你想忽略这个检查的页面,即登录和注册等)。