How to retrieve the third uri segment in a codeign

2019-04-29 03:17发布

问题:

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.

回答1:

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


回答2:

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