CodeIgniter: How to get Controller, Action, URL information
PhpCodeigniterCodeigniter 2Php Problem Overview
I have these URLs:
How to get controller name, action name from these URLs. I'm CodeIgniter newbie. Are there any helper function to get this info
Ex:
$params = helper_function( current_url() )
Where $params
becomes something like
array (
'controller' => 'system/settings',
'action' => 'edit',
'...'=>'...'
)
Php Solutions
Solution 1 - Php
You could use the URI Class:
$this->uri->segment(n); // n=1 for controller, n=2 for method, etc
I've also been told that the following work, but am currently unable to test:
$this->router->fetch_class();
$this->router->fetch_method();
Solution 2 - Php
Instead of using URI segments you should do this:
$this->router->fetch_class(); // class = controller
$this->router->fetch_method();
That way you know you are always using the correct values even if you are behind a routed URL, in a sub-domain, etc.
Solution 3 - Php
The methods are deprecated.
$this->router->fetch_class();
$this->router->fetch_method();
You can access the properties instead.
$this->router->class;
$this->router->method;
> # URI Routing methods fetch_directory(), fetch_class(), fetch_method()
With properties CI_Router::$directory
, CI_Router::$class
and
> CI_Router::$method
being public and their respective fetch_*()
no
> longer doing anything else to just return the properties - it doesn’t
> make sense to keep them.
>
> Those are all internal, undocumented methods, but we’ve opted to
> deprecate them for now in order to maintain backwards-compatibility
> just in case. If some of you have utilized them, then you can now just
> access the properties instead:
>
> $this->router->directory;
> $this->router->class;
> $this->router->method;
Solution 4 - Php
Another way
$this->router->class
Solution 5 - Php
As an addition
$this -> router -> fetch_module(); //Module Name if you are using HMVC Component
Solution 6 - Php
Update
The answer was added was in 2015 and the following methods are deprecated now
$this->router->fetch_class(); in favour of $this->router->class;
$this->router->fetch_method(); in favour of $this->router->method;
Hi you should use the following approach
$this->router->fetch_class(); // class = controller
$this->router->fetch_method(); // action
for this purpose but for using this you need to extend your hook from the CI_Controller
and it works like a charm, you should not use uri segments
Solution 7 - Php
If you using $this->uri->segment , if urls rewriting rules change, segments name matching will be lost.
Solution 8 - Php
Use This Code anywhere in class or libraries
$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
Solution 9 - Php
Last segment of URL will always be the action. Please get like this:
$this->uri->segment('last_segment');
Solution 10 - Php
$this->router->fetch_class();
// fecth class the class in controller $this->router->fetch_method();
// method
Solution 11 - Php
controller class is not working any functions.
so I recommend to you use the following scripts
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];
}