2013-02-28 5 views
0

У меня есть следующий код, который я добавил к MY_Controller, что в настоящее время распространяется на все мои контроллеры:Ручка CodeIgniter переназначения с параметрами

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) является конденсацию Params, чтобы Массив. Поэтому такой метод, как следующие перерывы:

function some_method($param1, $param2, $param3) 

Есть ли способ, чтобы разорвать этот массив обратно в отдельные элементы для таких функций, как это?

+0

Это было мое сообщение, и приведенный выше код основан на этом коде. Код в ссылке, на которую вы ссылаетесь, не отделяет параметры, он отправляет их как МАССИВ. –

+0

Вы можете сделать что-то неправильно. Я тестировал и отправляет отдельные параметры. Создайте контроллер 'Example' и проверьте ответ. –

ответ

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); 
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» с именами методов, который содержит параметры, и, конечно, вы можете добавить столько способов, сколько вы хотите.