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

StackOverflow https://stackoverflow.com/questions/2062086

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня есть эти URL-адреса:

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

Бывший:

$params = helper_function( current_url() )

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

array (
  'controller' => 'system/settings', 
  'action' => 'edit', 
  '...'=>'...'
)
Это было полезно?

Решение

Вы можете использовать Класс 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

Обновлять

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

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

Используйте этот код где угодно в классе или библиотеках.

    $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

Последний сегмент 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];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top