可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have these URLs:
- http://backend.domain.com/system/setting/edit/12
- http://backend.domain.com/product/edit/1
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',
'...'=>'...'
)
回答1:
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();
回答2:
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.
回答3:
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;
回答4:
Another way
$this->router->class
回答5:
As an addition
$this -> router -> fetch_module(); //Module Name if you are using HMVC Component
回答6:
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
回答7:
If you using $this->uri->segment , if urls rewriting rules change, segments name matching will be lost.
回答8:
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
回答9:
$this->router->fetch_class();
// fecth class the class in controller
$this->router->fetch_method();
// method
回答10:
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];
}