我想只为登录用户提供一些操作。 我试图通过这段代码限制一些:
function _remap($method)
{
$restricted = array('update_rating', 'delete_post');
if( ! $this->session->userdata('logged_in') && in_array($method, $restricted))
{
echo 'Log in, please';
}
else {
$this->$method();
}
}
但$ this-> $ method()没有收到在网址中发送的参数。怎么办? 我想仅对登录用户进行一些操作。
答案 0 :(得分:2)
理想情况下,您不应该使用此开发模式来创建用户登录。您只需在您正在调用的类的构造函数中进行检查,并使用$ this-> router->方法查看用户尝试访问的方法。检查是否需要登录的方法数组,然后检查用户是否登录。如果其中一个条件为false,则重定向到登录页面,否则继续执行该调用。下面的示例实现:
Class XYZ extends Controller{
function __construct() {
parent::controller();
$protected_methods = array('method_1', 'method_2');
if(in_array($this->router->method, $protected_methods)){
// check if user is logged in
if(!$this->session->userdata('logged_in'))
redirect('/login');
}
}
}
答案 1 :(得分:2)
要限制整个控制器的登录用户,请使用以下内容:
function __construct(){
if(!is_logged_in){
redirect('user/login');
}
}
如果您需要限制特定方法,请执行相同的操作:
function restricted_function(){
if(!is_logged_in){
redirect('user/login');
}
}
这要求在调用控制器之前设置is_logged_in变量。
我使用一个MY_controller来检查所有控制器继承的登录会话。
答案 2 :(得分:1)
您没有向其发送任何参数。
您应该提供需要$ method进行评估的所有参数。
function _remap($method)
{
$restricted = array('update_rating', 'delete_post');
if( ! $this->session->userdata('logged_in') && in_array($method, $restricted))
{
echo 'Log in, please';
}
else
{
$params = get_func_get_args();
$this->$method($params);
}
}
请注意,这些方法现在将接收参数数组。