如何将带有的剪切URL路由到CodeIgniter中的自定义控制器


How to route cutom URL with to custom controller in CodeIgniter?

我有一个名为User的PHP CodeIgniter控制器,并且有一个获取用户user_detail($username)详细信息的方法
现在,当我需要显示用户数据时,例如userName mike
我将此URL称为
http://www.example.com/user/user_detail/mike

我的目标
如何使用户数据可由下一个URL访问
http://www.example.com/user/mike
或/和
http://www.example.com/mike

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

application/config/routes.php

可能是这样的:

$route['user/(:any)'] = "user/user_detail/$1";

这可以通过覆盖CI_Controller类来实现,但不要更改原始核心文件,就像我说的覆盖控制器并将您的逻辑放入其中一样。

帮助:https://ellislab.com/codeigniter/user-guide/general/core_classes.html

如何创建Codeigniter路由;是否覆盖其他控制器路线?

也许一个更简单的解决方案是在.htaccess中使用apachemod_rewrite来路由它

以下是如何实现这一目标的详细说明:http://www.web-and-development.com/codeigniter-remove-index-php-minimize-url/

Hatem的答案(使用路由配置)更简单、更清晰,但指出_remap()函数的使用在某些情况下可能会有所帮助:

CI_Controller内部,每次对控制器的调用都会执行_remap()函数,以决定使用哪种方法。在那里,您可以检查该方法是否存在,或者使用一些定义的方法。在您的情况下:

application/controllers/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!";
    }
}

这将导致:

http://www.example.com/user/user_detail/john=>'用户名:john'http://www.example.com/user/mike…………..=>'用户名:mike'http://www.example.com/user/another_func…=>'另一个功能体!'

但不适用于:http://www.example.com/mike,因为控制器(即使它是默认控制器)根本没有被调用,在这种情况下,CI的默认行为是寻找一个名为mike的控制器,如果没有找到,它将抛出404错误。

更多信息:

Codeigniter用户指南3:控制器:重映射方法调用

如果CodeIgniter方法不存在,则重定向到默认方法。