CodeIgniter: How to get Controller, Action, URL information
-
20-09-2019 - |
Question
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',
'...'=>'...'
)
Solution
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();
OTHER TIPS
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.
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
andCI_Router::$method
being public and their respectivefetch_*()
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;
Another way
$this->router->class
As an addition
$this -> router -> fetch_module(); //Module Name if you are using HMVC Component
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
If you using $this->uri->segment , if urls rewriting rules change, segments name matching will be lost.
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
Last segment of URL will always be the action. Please get like this:
$this->uri->segment('last_segment');
$this->router->fetch_class();
// fecth class the class in controller $this->router->fetch_method();
// method
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];
}