2016-03-23 3 views
1

私はcodeigniterにPHPで書かれたウェブサイトを持っています。私が対処しようとしているシナリオは、次のとおりです。データベース駆動型の動的URL /コントローラ名を最適に実装するにはどうすればよいですか?

ユーザーがサインアップすると、パーソナライズドホームページはwww.mysite.com/usernameに表示されます。その他のURLの形式は、www.mysite.com/username/pictures & www.mysite.com/username/videosです。

www.mysite.com/username/method(usernameはデータベース駆動型です)は、ユーザー名がデータベースに存在する場合は、常に同じコントローラを使用する必要があります。

現在、私はカスタム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"); 
     } 

私のクエリは、これは私が必要とするものについて行くための最善の方法ですか?これをどのように改善できますか? HMVCモジュラーエクステンションについて聞いたことがあります。ただいくつかのアドバイスを探しています。

+0

ルート設定の一番下に '$ route ['(:any)'] = 'コントローラ/メソッド/ $ 1'を設定できます。次に、別のルート設定と一致しないルートがここで送信されます。 'public function userDashboard($ username)'は、あなたのメソッドがどのように見えるかを示します。次に、ユーザー名が有効であることを確認するだけです。 – mic

答えて

4

あなたの設定> routs.phpファイルこの中に今

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

にこのコードを書くことで、これを行うことができれば、それは自動的にあなたのコントローラになりますよりも、いずれかのライトユーザー名/写真は、URL 。

関連する問題