如何使用CodeIgniter获取Controller,Action和URL信息

我有这些url:

  • http://backend.domain.com/system/setting/edit/12
  • http://backend.domain.com/product/edit/1

如何从这些url获取控制器名称,操作名称。 我是codeigniter新手。 有没有任何帮助function来获得这个信息

例如:

$params = helper_function( current_url() ) 

$params变成类似的东西

 array ( 'controller' => 'system/settings', 'action' => 'edit', '...'=>'...' ) 

你可以使用URI类 :

 $this->uri->segment(n); // n=1 for controller, n=2 for method, etc 

我也被告知以下工作,但目前无法testing:

 $this->router->fetch_class(); $this->router->fetch_method(); 

而不是使用URI段,你应该这样做:

 $this->router->fetch_class(); // class = controller $this->router->fetch_method(); 

这样你就知道你总是使用正确的值,即使你在一个路由URL后面,在一个子域等等

这些方法已被弃用。

 $this->router->fetch_class(); $this->router->fetch_method(); 

您可以改为访问属性。

 $this->router->class; $this->router->method; 

请参阅codeigniter用户指南

URI路由方法fetch_directory(),fetch_class(),fetch_method()使用属性CI_Router :: $目录,CI_Router :: $ class和CI_Router :: $方法是公共的,它们各自的fetch _ *()不再做任何事情来返回属性 – 保留它们是没有意义的。

这些都是内部的,没有logging的方法,但是我们现在select弃用它们以保持向后兼容性以防万一。 如果你们中的一些人已经使用了它们,那么现在你可以直接访问属性:

 $this->router->directory; $this->router->class; $this->router->method; 

作为补充

 $this -> router -> fetch_module(); //Module Name if you are using HMVC Component 

其他方式

 $this->router->class 

嗨,你应该使用下面的方法

 $this->router->fetch_class(); // class = controller $this->router->fetch_method(); // action 

为此目的,但使用这个你需要扩展你的挂钩从CI_Controller ,它的作品像一个魅力,你不应该使用uri段

如果使用$ this-> uri->段,如果url重写规则发生变化,段名称匹配将会丢失。

在课堂或图书馆的任何地方使用此代码

  $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 

控制器类不工作任何function。

所以我build议你使用下面的脚本

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