Php 如何将cutom URL路由到CodeIgniter中的自定义控制器?

Php 如何将cutom URL路由到CodeIgniter中的自定义控制器?,php,codeigniter,uri,url-routing,Php,Codeigniter,Uri,Url Routing,我有一个名为User的PHP CodeIgniter控制器,还有一个方法可以获取用户的详细信息User\u detail($username) 现在,当我需要显示用户数据时,例如用户名mike 我称之为URL 我的目标 如何通过下一个URL访问用户数据 或/和 这可以通过重写CI\u Controller类来实现,但不要更改原始核心文件,就像我说的那样,重写控制器并将逻辑放入其中 帮助: 也许更简单的解决方案是在.htaccess中使用apache mod_rewrite对其进行路由 下面

我有一个名为
User
的PHP CodeIgniter控制器,还有一个方法可以获取用户的详细信息
User\u detail($username)

现在,当我需要显示用户数据时,例如用户名
mike

我称之为URL

我的目标
如何通过下一个URL访问用户数据

或/和

这可以通过重写
CI\u Controller
类来实现,但不要更改原始核心文件,就像我说的那样,重写控制器并将逻辑放入其中

帮助:

也许更简单的解决方案是在.htaccess中使用apache mod_rewrite对其进行路由

下面是如何实现它的详细说明:

您必须阅读codeigniter官方文档中的说明。它涵盖了所有与路由URL相关的内容。必须通过以下文件配置所有路由:

application/config/routes.php
可能是这样的:

$route['user/(:any)'] = "user/user_detail/$1";
的答案(使用路由配置)更简单、更清晰,但指出
\u remap()
函数的用法在某些情况下可能会有所帮助:

CI\u控制器
中,每次调用控制器时都会执行
\u remap()
函数,以决定使用哪种方法。在那里,您可以检查该方法是否存在,或者使用一些已定义的方法。就你而言:

应用程序/控制器/User.php

class User extends CI_Controller {
    public function _remap($method, $params = array())
    {
        if (method_exists(__CLASS__, $method)) {
            $this->$method($params);
        } else {
            array_unshift($params, $method);
            $this->user_detail($params);
        }
    }

    public function user_detail($params) {
        $username = $params[0];
        echo 'username: ' . $username;
    }

    public function another_func() {
        echo "another function body!";
    }
}
这将导致:

=>'用户名:john' ........... => '用户名:mike's ... => '另一个职能机构!”

但它不适用于:,因为根本不调用控制器(即使它是默认控制器),在这种情况下,CI默认行为是查找名为
mike
的控制器,如果找不到它,将抛出404错误

更多信息:

$route['user/(:any)]=“user/user\u detail/$1”$路由['(:any)]=“用户/用户详细信息/$1”;