使用参数处理CodeIgniter重映射

时间:2013-02-28 03:10:10

标签: codeigniter remap

我将以下代码添加到我的所有控制器正在扩展的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)

有没有办法将此数组分解为单个项目以用于此类函数?

2 个答案:

答案 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”包含您的方法名称,包含参数,当然您可以添加任意数量的方法。