I'm writing a custom post_controller hook. As we know, codeigniter uri structure is like this:

example.com/class/function/id/

and my code:

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
}

I've browsed the core Router.php file, which puzzled me a lot.

thanks.

有帮助吗?

解决方案

Using CodeIgniter URI core class

Generally within CodeIgniter Hooks, we need to load/instantiate the URI core class to reach the methods.

  • For post_controller_constructor, post_controller, ... hooks, we can get the CodeIgniter super object and use use the uri class:
# Get the CI instance
$CI =& get_instance();

# Get the third segment
$CI->uri->segment(3);
  • But for pre_controller hook, we don't have access to CodeIgniter super object So we have to load the URI core class manually as follows:
# Load the URI core class
$uri =& load_class('URI', 'core');

# Get the third segment
$id = $uri->segment(3); // returns the id

Using pure PHP

In this approach you can use $_SERVER array to fetch the URI segments as:

$segments = explode('/', trim($_SERVER['REQUEST_URI'], '/'));

$controller = $segments[1];
$method     = $segments[2];
$id         = $segments[3];

其他提示

You can use the router class :

$this->router->fetch_class();
$this->router->fetch_method();

Or the URI class :

$this->uri->segment(1); // the class
$this->uri->segment(2); // the function
$this->uri->segment(3); // the ID
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top