CodeIgniter: как получить информацию о контроллере, действии, URL

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

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

Пример:

$params = helper_function( current_url() )

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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

$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;

Ответ 4

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

$this->router->class

Ответ 5

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

$this -> router -> fetch_module(); //Module Name if you are using HMVC Component

Ответ 6

Обновить

Ответ был добавлен в 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

Ответ 7

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

Ответ 8

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

    $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

Ответ 9

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

$this->uri->segment('last_segment');

Ответ 10

$this->router->fetch_class(); 

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

//метод

Ответ 11

класс контроллера не выполняет никаких функций.

поэтому я рекомендую вам использовать следующие скрипты

global $argv;

if(is_array($argv)){
    $action = $argv[1];
    $method = $argv[2];
}else{
    $request_uri = $_SERVER['REQUEST_URI'];
    $pattern = "/.*?\/index\.php\/(.*?)\/(.*?)$/";
    preg_match($pattern, $request_uri, $params);
    $action = $params[1];
    $method = $params[2];
}