2 Stimmen

Codeigniter mehrere Controller vs viele Methoden?

Ich habe eine Website mit vielen Seiten, die an der Wurzel verweilen (z.B. /contact , /about , /home , /faq , /privacy , /tos , usw.). Meine Frage ist, sollten diese alle separate Controller oder ein Controller mit vielen Methoden (ex. contact , about , index innerhalb einer main.php Controller)?

UPDATE: Ich habe gerade festgestellt, dass Methoden, die innerhalb der Standard-Controller sind nicht in der Url ohne die Standard-Controller zeigen (dh. main/contact wird nicht automatisch weitergeleitet zu /contact wenn main der Standard-Controller ist). Sie müssten also in die Routen gehen und jedes der folgenden Elemente außer Kraft setzen page .

4voto

Chris Schmitz Punkte 7707

Wenn dies alles nur Seiten sind, würde ich empfehlen, sie in einen einzigen Controller zu packen. Ich in der Regel am Ende setzen statische Seiten wie diese in eine "Seiten" Controller und setzen in Routen für jede statische Seite, um die "/ Seiten" in meine URLs zu umgehen.

2voto

fatnjazzy Punkte 5840

Wenn sie dieselbe Funktionalität haben, sollten sie auch im selben Controller sein.
zum Beispiel, wenn alle von ihnen das gleiche Modell verwenden, um Inhalte zu übernehmen, so kann ein Controller es leicht handhaben.
Warum in einem Controller? Weil Sie Ihren Code immer wieder verwenden wollen.

   class someController{
    function cotact(){
        print $this->getContentFromModel(1);

    }

    function about(){
        print $this->getContentFromModel(2);
    }

    function home(){
        print $this->getContentFromModel(3);
    }

    private function getContentFromModel($id){
        return $this->someContentModel->getContentById($id);
    } 
}

(anstelle von print verwenden, sollten Sie load a view )

In meinem Beispiel sehen Sie, wie alle Funktionen dieselbe getContentFromModel-Funktion verwenden, um dieselbe Funktionalität zu nutzen.

aber das ist nur ein Fall, es könnte andere Fälle geben, für die mein Beispiel schlecht sein könnte...

2voto

Hezuo Punkte 23

In anwendung/config/routes.php

$route['contact'] = "mainController/contact";
$route['about'] = "mainController/about";
$route['home'] = "mainController/home";
$route['faq'] = "mainController/faq";
$route['privacy'] = "mainController/privacy";

und Sie sollten alle diese Methoden in der mainController.php hinzufügen

Sie können den Inhalt der Seiten auch in Ihrer Datenbank speichern und diese abfragen. Zum Beispiel können Sie die URL als Schlüsselwort senden, um den Inhalt der Seite zu identifizieren

   $route['contact'] = "mainController/getContent/contact";
    $route['about'] = "mainController/getContent/about";
    $route['home'] = "mainController/getContent/home";
    $route['faq'] = "mainController/getContent/faq";
    $route['privacy'] = "mainController/getContent/privacy";

In diesem Fall müssen Sie nur eine Methode mit dem Namen "getContent" im Controller "mainController" erstellen, und diese Methode wird in etwa wie folgt aussehen:

class mainController extends CI_Controller
{
public function getContent($param)
{
    $query = $this->db->get_where('mytable', array('pageName' => $param));
//  then get the result and print it in  a view
    }    
    }

Ich hoffe, das funktioniert für Sie

1voto

Dmitry Samuylov Punkte 1514

Die von Ihnen aufgeführten Seitennamen sollten wahrscheinlich verschiedene Methoden innerhalb Ihres Hauptcontrollers sein. Wenn Sie andere Funktionen haben, die sich auf eine andere spezifische Entität beziehen, wie z.B. Benutzer, können Sie einen weiteren Controller für die Benutzerentität erstellen und verschiedene Methoden haben, um den Benutzer anzuzeigen, den Benutzer zu aktualisieren, den Benutzer zu registrieren. Aber das ist alles nur ein Werkzeug, mit dem Sie Ihre Anwendung so organisieren können, wie es für Ihre Domäne und Ihr Domänenmodell sinnvoll ist.

1voto

Casey Flynn Punkte 13156

Ich habe einen Blog-Beitrag über die Organisation von CodeIgniter-Controller-Methoden geschrieben, der für Sie hilfreich sein könnte. Lesen Sie ihn hier: http://caseyflynn.com/2011/10/26/codeigniter-php-framework-how-to-organize-controllers-to-achieve-dry-principles/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X