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

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

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

Пример:

$params = helper_function( current_url() )

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

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

11 ответов

Решение

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

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

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

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

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

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

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

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

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

По-другому

$this->router->class

Как дополнение

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

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

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

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

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

    $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

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

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

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

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

// метод

Контроллер класса не работает никакими функциями.

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

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];
}
Другие вопросы по тегам