我将以下代码添加到我的所有控制器正在扩展的MY_Controller中:
public function _remap($method, $params = array())
{//exit($this->router->fetch_class());
if (array_search($method, $this->private_methods) !== false && !$this->logged_in)
{
$this->session->set_flashdata('message', array(
'message' => 'You must login to access the requested area',
'error' => 1
)
);
redirect('/');
}
else if (method_exists($this, $method))
{
$this->$method($params);
}
else
{
redirect('/');
}
}
正在创建的问题是调用$this->$method($params)
正在将参数压缩到数组中。所以这样的方法如下:
function some_method($param1, $param2, $param3)
有没有办法将此数组分解为单个项目以用于此类函数?
答案 0 :(得分:0)
我试图做同样的事情并找到与
相同的问题$this->$method($params);
我找到了另一个选项
call_user_method_array($method,$this,$params);
哪个有效,但已弃用。 Function in PHP deprecated, what should I use now?
但希望这是新的。
call_user_func_array(array($this,$method), $params);
答案 1 :(得分:0)
我试过这个,它对我有用
public function _remap($method,$params = array())
{
if (method_exists($this, $method)) {
if($method == 'delete_photo' || $method == 'delete_video'){
call_user_func_array(array($this,$method), $params);
}
else{
$this->$method();
}
}
else {
$this->index($method);
}
}
现在你只需要替换“delete_photo”& “delete_video”包含您的方法名称,包含参数,当然您可以添加任意数量的方法。