CodeIgniter - инициализатор кода:Как получить информацию о контроллере, Действии, URL
-
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];
}