2016-03-23 10 views
1

Ich habe eine Website, die in PHP auf Codeigniter geschrieben ist. Das Szenario, mit dem ich umgehen möchte, ist das Folgende:Wie implementiert man am besten den dynamischen URL/Controller-Namen, der datenbankgesteuert ist?

Wenn sich ein Benutzer anmeldet, sollte seine personalisierte Startseite unter www.mysite.com/username angezeigt werden. Andere URLs sind von der Form www.mysite.com/username/pictures & www.mysite.com/username/videos.

Also im Grunde, was ich brauche, ist www.mysite.com/username/method (wo der Benutzername ist datenbankgesteuert) sollte immer den gleichen Controller treffen, wenn der Benutzername in der Datenbank existiert.

Momentan verwende ich den benutzerdefinierten 404-Controller, um dies zu tun. Wenn eine URL den benutzerdefinierten 404-Controller erreicht, überprüfe ich, ob der Name des Controllers mit einem Benutzernamen in der Datenbank übereinstimmt, dann überprüfe den Methodennamen und rufe die erforderliche Methode auf. Wie so:

$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"); 
     } 

Meine Frage ist, ist dies der beste Weg, um zu gehen, was ich brauche? Wie kann ich das verbessern? Ich habe von der modularen Erweiterung HMVC für Code-Anfänger gehört, die eine gute Wette sein kann? Ich suche nur einen Rat.

+0

Sie könnten eine '$ route ['(: any)'] = 'controller/method/$ 1'' am unteren Rand Ihrer Routen-Konfiguration einrichten. Dann wird hier eine Route gesendet, die nicht mit einer anderen Routeneinstellung übereinstimmt. 'public function userDashboard ($ username)' ist, wie Ihre Methode aussehen sollte. Dann müssen Sie nur überprüfen, ob der Benutzername gültig ist. – mic

Antwort

4

Sie können dies tun, um diesen Code durch das Schreiben in Ihrer config> routs.php Datei

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

jetzt in diesen, wenn eine Schreib Benutzername/url Bilder als es automatisch auf Ihren Controller geht, wird .

Verwandte Themen