编码器跳过登录检查,在构造函数中定义,用于特定操作



我在控制器构造方法中定义了一个登录检查,代码如下:

if($this->session->userdata('log_in')== false){ 
    redirect(); //function for redirect to login page
}

但是我不想为一个特定的操作调用这个login check

(例如public function viewProduct())

同一控制器的

。我该怎么做呢?

可以在构造函数中指定方法名,如

$method = $this->router->fetch_method();
if($this->session->userdata('log_in')== false && $method !== 'viewProduct'){ 
    redirect(); //function for redirect to login page
}

现在viewProduct方法将不检查

不能。你可以在单个控制器方法中运行登录检查,也可以将视图产品放入它自己的控制器中,该控制器在构造函数中不进行登录检查。

考虑到这一点,我想你可以像这样检查构造函数中的段:

if ( ($this->session->userdata('log_in')== false) AND ($this->uri->segment(2, '') != 'view_product') ) 
    redirect(); //function for redirect to login page
}

uri_segment的解释如下:http://www.codeigniter.com/user_guide/general/urls.html#uri-segments

我不确定这是个好主意。我自己会做前两个建议中的一个。但这只是个人喜好的问题。

希望有帮助,

保罗。

我认为最好的方法是在控制器中传递方法,而不是在构造函数上传递方法。构造函数首先在加载控制器时运行,因此通过它进行处理不是一个好的做法。但是某些钩子可以为您工作,但是您应该真正遵循将来编码的标准实践。