我正在编写一个自定义的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文件,它让我很困惑。
谢谢。
使用CodeIgniter URI核心类
通常在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