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

时间:2016-03-23 07:12:45

标签: php codeigniter routing

我有一个用codeigniter在PHP上编写的网站。我希望应对的方案如下:

用户注册时,其个性化主页应显示在 www.mysite.com/username 上。其他网址的格式为 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");
        }

我的疑问是,这是我需要的最佳方式吗?我怎样才能改善这个?我听说过针对codeiginiter的HMVC模块化扩展,这可能是一个不错的选择?只是寻找一些建议。

1 个答案:

答案 0 :(得分:4)

您可以在配置>中编写此代码来执行此操作routs.php 文件

$route['(:any)/pictures'] = 'yourcontrollername/functionName/$1';

现在在此,如果任何人写的用户名/图片网址都会自动转到控制器