Как получить третий сегмент URI в коде крючка
Я пишу пользовательский хук post_controller. Как мы знаем, структура codeigniter uri выглядит так:
example.com/class/function/id/
и мой код:
function hook_acl()
{
global $RTR;
global $CI;
$controller = $RTR->class; // the class part in uri
$method = $RTR->method; // the function part in uri
$id = ? // how to parse this?
// other codes omitted for brevity
}
Я просмотрел основной файл Router.php, что меня сильно озадачило.
Благодарю.
2 ответа
Решение
Использование базового класса URI CodeIgniter
Обычно в CodeIgniter Hooks нам необходимо загрузить / создать экземпляр базового класса URI для доступа к методам.
- За
post_controller_constructor
,post_controller
хуки, мы можем получить суперобъект CodeIgniter и использоватьuri
учебный класс:
# Get the CI instance
$CI =& get_instance();
# Get the third segment
$CI->uri->segment(3);
- Но для
pre_controller
хук, у нас нет доступа к суперобъекту CodeIgniter. Поэтому мы должны вручную загрузить базовый класс URI следующим образом:
# Load the URI core class
$uri =& load_class('URI', 'core');
# Get the third segment
$id = $uri->segment(3); // returns the id
Используя чистый PHP
В этом подходе вы можете использовать $_SERVER
массив для извлечения сегментов URI как:
$segments = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
$controller = $segments[1];
$method = $segments[2];
$id = $segments[3];
Вы можете использовать router
учебный класс:
$this->router->fetch_class();
$this->router->fetch_method();
Или класс URI:
$this->uri->segment(1); // the class
$this->uri->segment(2); // the function
$this->uri->segment(3); // the ID