CodeIgniter: 如何获取 Controller、 Action 和 URL 信息

我有这些网址:

如何从这些 URL 获取控制器名称、操作名称。我是 CodeIgniter 的新手。是否有任何帮助函数来获取这些信息

例如:

$params = helper_function( current_url() )

Where $params becomes something like

array (
'controller' => 'system/settings',
'action' => 'edit',
'...'=>'...'
)
214040 次浏览

你可以使用 URI 类:

$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();

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

$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.

作为补充

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

另一种方式

$this->router->class

如果使用 $this-> uri-> 段,则如果 urls 重写规则更改,段名称匹配将丢失。

Update

答案是在2015年添加的,以下方法现在已不再适用

$this->router->fetch_class();  in favour of  $this->router->class;
$this->router->fetch_method(); in favour of  $this->router->method;

嗨,你应该使用以下方法

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

为了这个目的,但使用这个你需要从 CI_Controller扩展你的钩子,它的工作原理就像一个符咒,你不应该使用 uri 段

不推荐使用这些方法。

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

您可以改为访问这些属性。

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

参见 编码点火器用户指南

URI Routing methods fetch_directory(), fetch_class(), fetch_method()

具有 CI_Router::$directoryCI_Router::$classCI_Router::$method是公开的,他们各自的 fetch_*()号 longer doing anything else to just return the properties - it doesn’t 保留它们是有意义的。

这些都是内部的非法手段,但我们选择了 暂时取消它们以保持向后兼容性 以防万一。如果你们中的一些人已经利用了它们,那么你们现在可以 取而代之的是:

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

在类或库中的任何位置使用此代码

    $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

控制器类不能工作任何函数。

所以我建议您使用以下脚本

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];
}
$this->router->fetch_class();

//fecth 类控制器中的类 $this-> router-> get _ method () ;

//方法

网址的最后一段将永远是动作。请这样做:

$this->uri->segment('last_segment');