CodeIgniter: как получить информацию о контроллере, действии, URL - PullRequest
114 голосов
/ 14 января 2010

У меня есть эти URL:

Как получить имя контроллера, имя действия из этих URL. Я новичок в CodeIgniter. Есть ли какая-нибудь вспомогательная функция для получения этой информации

Ex:

$params = helper_function( current_url() )

Где $params становится чем-то вроде

array (
  'controller' => 'system/settings', 
  'action' => 'edit', 
  '...'=>'...'
)

Ответы [ 11 ]

204 голосов
/ 14 января 2010

Вы можете использовать URI Class :

$this->uri->segment(n); // n=1 for controller, n=2 for method, etc

Мне также сказали, что следующие работы, но в настоящее время я не могу проверить:

$this->router->fetch_class();
$this->router->fetch_method();
130 голосов
/ 15 января 2010

Вместо использования сегментов URI вы должны сделать это:

$this->router->fetch_class(); // class = controller
$this->router->fetch_method();

Таким образом, вы знаете, что всегда используете правильные значения, даже если вы находитесь за перенаправленным URL-адресом, в поддомене и т. Д.

26 голосов
/ 05 января 2016

Методы устарели.

$this->router->fetch_class();
$this->router->fetch_method();

Вместо этого вы можете получить доступ к свойствам.

$this->router->class;
$this->router->method;

См. codeigniter Руководство пользователя

Методы маршрутизации URI fetch_directory (), fetch_class (), fetch_method ()

со свойствами CI_Router::$directory, CI_Router::$class и CI_Router::$method публичный и соответствующий ему fetch_*() нет больше делать что-либо еще, чтобы просто вернуть свойства - это не имеет смысл сохранить их.

Это все внутренние недокументированные методы, но мы решили устареть их сейчас, чтобы поддерживать обратную совместимость так, на всякий случай. Если некоторые из вас использовали их, то теперь вы можете просто вместо этого получите доступ к свойствам:

$this->router->directory;
$this->router->class;
$this->router->method;
12 голосов
/ 04 декабря 2012

Другой способ

$this->router->class
10 голосов
/ 03 января 2012

В качестве дополнения

$this -> router -> fetch_module(); //Module Name if you are using HMVC Component
5 голосов
/ 21 мая 2015

Обновление

Ответ был добавлен в 2015 году, а следующие методы устарели

$this->router->fetch_class();  in favour of  $this->router->class; 
$this->router->fetch_method(); in favour of  $this->router->method;

Привет, ты должен использовать следующий подход

$this->router->fetch_class(); // class = controller
$this->router->fetch_method(); // action

для этой цели, но для его использования вам нужно вытянуть хук из CI_Controller и он работает как брелок, вам не следует использовать сегменты uri

3 голосов
/ 20 января 2016

Используйте этот код в любом месте класса или библиотеки

    $current_url =& get_instance(); //  get a reference to CodeIgniter
    $current_url->router->fetch_class(); // for Class name or controller
    $current_url->router->fetch_method(); // for method name
3 голосов
/ 24 января 2014

Если вы используете $ this-> uri-> сегмент, если изменяются правила переписывания URL, совпадение имен сегментов будет потеряно.

0 голосов
/ 14 февраля 2019

Последний сегмент URL всегда будет действием. Пожалуйста, получите так:

$this->uri->segment('last_segment');
0 голосов
/ 13 февраля 2018
$this->router->fetch_class(); 

// fecth class класс в контроллере $ This-> router-> fetch_method ();

// метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...