124

我有这些网址:

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

前任:

$params = helper_function( current_url() )

哪里$params变成了类似的东西

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

11 回答 11

227

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();
于 2010-01-14T04:22:37.473 回答
135

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

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

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

于 2010-01-15T11:44:57.177 回答
31

这些方法已弃用。

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

您可以改为访问属性。

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

请参阅codeigniter 用户指南

URI 路由方法 fetch_directory()、fetch_class()、fetch_method()

有了 properties CI_Router::$directoryCI_Router::$class并且 CI_Router::$method公开并且他们各自fetch_*()不再做任何其他事情来返回 properties - 保留它们是没有意义的。

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

$this->router->directory;
$this->router->class;
$this->router->method;
于 2016-01-05T12:10:13.553 回答
12

另一种方式

$this->router->class
于 2012-12-04T12:57:03.363 回答
11

作为补充

$this -> router -> fetch_module(); //Module Name if you are using HMVC Component
于 2012-01-03T10:24:45.243 回答
8

更新

答案是在 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为此目的,但要使用它,您需要从

于 2015-05-21T12:28:04.440 回答
3

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

于 2014-01-24T11:20:07.950 回答
3

在类或库中的任何地方使用此代码

    $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
于 2016-01-20T08:27:42.533 回答
1

URL 的最后一段将始终是操作。请像这样:

$this->uri->segment('last_segment');
于 2019-02-14T10:49:36.300 回答
-1
$this->router->fetch_class(); 

// fecth class 控制器中的类 $this->router->fetch_method();

// 方法

于 2018-02-13T03:54:20.333 回答
-4

控制器类没有任何功能。

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

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];
}
于 2016-09-05T03:26:50.323 回答