Php 如何最好地实现数据库驱动的动态url/控制器名称?

Php 如何最好地实现数据库驱动的动态url/控制器名称?,php,codeigniter,routing,Php,Codeigniter,Routing,我有一个在codeigniter上用PHP编写的网站。我希望处理的情况如下: 当用户注册时,其个性化主页应显示在www.mysite.com/username上。其他URL的格式为www.mysite.com/username/pictures&www.mysite.com/username/videos 因此,基本上我需要的是www.mysite.com/username/method,其中用户名是数据库驱动的,如果数据库中存在用户名,则应始终命中同一个控制器 目前,我正在做的是使用定制404

我有一个在codeigniter上用PHP编写的网站。我希望处理的情况如下:

当用户注册时,其个性化主页应显示在www.mysite.com/username上。其他URL的格式为www.mysite.com/username/pictures&www.mysite.com/username/videos

因此,基本上我需要的是www.mysite.com/username/method,其中用户名是数据库驱动的,如果数据库中存在用户名,则应始终命中同一个控制器

目前,我正在做的是使用定制404控制器来实现这一点。如果URL到达自定义404控制器,我将检查控制器名称是否与数据库中的用户名匹配,然后检查方法名称并调用所需的方法。像这样:

$this->load->model('school_model');
        $this->load->model('event_model');

        $this->load->helper('apps_helper');

        $controllerName = $this->uri->segment(CONTROLLER);
        $controllerMatch = $this->school_model->findSchoolByUid($controllerName);
        $this->data['controller'] = $controllerMatch;

        if($controllerMatch != false){
            $methodName = $this->uri->segment(METHOD);
            if($methodName === "something"){
            //Do something
            }
            if($methodName === "something else"){
            //Do something else
            }
            if($methodName === "another thing"){
            //Do another thing
            }
            if($methodName === "last thing"){
            //Do last thing
            }
            ...
        }
        else{
            //Load 404 page
            $this->output->set_status_header('404');
            $data['content404'] = true; 
            $this->load->view("common/header", $data);
            $this->load->view('frontend/index404', $this->data);
            $this->load->view("common/footer");
        }

我的问题是,这是实现我需要的最好方式吗?我该如何改进这一点?我听说过CodeIgniter的HMVC模块扩展,这可能是一个不错的选择?只是想寻求一些建议。

您可以通过在config>routs.php文件中编写此代码来做到这一点

现在,如果任何人写入用户名/图片url,它将自动进入控制器。

您可以在路由配置的底部设置$route[':any']='controller/method/$1'。然后,任何与其他路由设置不匹配的路由都将发送到此处。公共函数userDashboard$username是您的方法的外观。然后,您所要做的就是检查用户名是否有效。
$route['(:any)/pictures'] = 'yourcontrollername/functionName/$1';