CodeIgniter: How to get Controller, Action, URL information

PhpCodeigniterCodeigniter 2

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

See codeigniter user guide

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionnoname.csView Question on Stackoverflow
Solution 1 - PhpSampsonView Answer on Stackoverflow
Solution 2 - PhpPhil SturgeonView Answer on Stackoverflow
Solution 3 - Phplumos0815View Answer on Stackoverflow
Solution 4 - PhpLuis ChanferoniView Answer on Stackoverflow
Solution 5 - PhpStarxView Answer on Stackoverflow
Solution 6 - PhpMuhammad Omer AslamView Answer on Stackoverflow
Solution 7 - PhpmonstermView Answer on Stackoverflow
Solution 8 - PhpAslam PatelView Answer on Stackoverflow
Solution 9 - PhpPrakashGView Answer on Stackoverflow
Solution 10 - PhpFelView Answer on Stackoverflow
Solution 11 - PhpJun TakeshitaView Answer on Stackoverflow