我在控制器构造方法中定义了一个登录检查,代码如下:
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
我不确定这是个好主意。我自己会做前两个建议中的一个。但这只是个人喜好的问题。
希望有帮助,
保罗。
我认为最好的方法是在控制器中传递方法,而不是在构造函数上传递方法。构造函数首先在加载控制器时运行,因此通过它进行处理不是一个好的做法。但是某些钩子可以为您工作,但是您应该真正遵循将来编码的标准实践。