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 -> 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];
}