2011-01-16 3 views
0

Manchmal brauche ich Daten wie Array und manchmal brauche ich dieselben Daten wie JSON.OOP MVC - Modell oder Controller zur Überprüfung des Rückgabedatentyps?

Wo würdest du prüfen, ob es einen Ajax-Anruf gibt, in Controller oder Modell oder ... Welches ist besser?

-Test ist, wenn Anruf ajax in Controller

function my_controller(){ 
    //getdata from model 
    $data=$this->my_model(); 
    if(THIS_IS_AJAX_CALL){ 
     echo json_encode($data); 
    }else{ 
     return $data; 
    } 
} 

function my_model(){ 
    //get the data from db 
    return $data; 
} 

Pass-Typ als Argument Modell:

function my_controller(){ 
    if(THIS_IS_AJAX_CALL){ 
     return $this->my_model('json'); 
    }else{ 
     return $this->my_model(); 
    } 
} 

function my_model($type=''){ 
    //get the data from db 
    if($type='json'){ 
     return json_encode($data); 
    }else{ 
     return $data; 
    } 
} 

Antwort

1

die Steuerung. Dem Modell ist es egal, wie die Daten für den Benutzer dargestellt werden müssen, nur die Daten selbst.

+0

Danke Maerlyn :) – mojeime

1

Ein Zitat aus dem Codeigniter tutorial explaining MVC:

  • Das Modell strukturiert Ihre Daten darstellt. In der Regel enthalten Ihre Modellklassen Funktionen, mit denen Sie Informationen in Ihrer Datenbank abrufen, einfügen und aktualisieren können.

  • Die Ansicht ist die Information, die einem Benutzer präsentiert wird. Eine Ansicht ist normalerweise eine Webseite, aber in CodeIgniter kann eine Ansicht auch ein Seitenfragment wie eine Kopf- oder Fußzeile sein. Es kann auch eine RSS-Seite oder eine andere Art von "Seite" sein.

  • Der Controller dient als Vermittler zwischen dem Modell, der Ansicht und anderen Ressourcen, die zum Verarbeiten der HTTP-Anforderung und zum Generieren einer Webseite benötigt werden.

Ich glaube, Sie in der Steuerung überprüfen sollen (dies nichts mit Datenstrukturen zu tun hat), um den Header zu sehen, ob es ein Ajax-Aufruf ist, weil jquery sets headers. Wenn es sich um einen Ajax-Anruf handelt, sollten Sie die gewünschte json_encode-Umwandlung durchführen. Ich denke, Ihr Code etwas entlang der Linien des Codes unten aussehen sollte:

function is_xhr() { 
    return @ $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] === 'XMLHttpRequest'; 
} 

$data = /* get from model */ 
if(is_xhr()){ 
    // Not explicitly needed, but we like being accurate, right?: 
    header('Content-type: application/json'); 

    echo json_encode($data); 
    exit(); // We don't need to render anything else 
} else { 
    echo $data; 
} 
+0

Was CodeIgniter beschreibt, ist Passive-MVC (wo das Modell davon nicht bewusst ist, ist die Verwendung in der Triade und nur eine seichte Datenbankschnittstelle). – mario

+0

@mario: Also, was schlägst du als Antwort auf meine Frage vor? – mojeime

+0

@mojeime: Nun, ich betrachte deine Frage als einen roten Hering. Es sollte nicht im falschen MVC-Triad, sondern im Bootstrap-Code behandelt werden. Es gibt zu wenige Gelegenheiten, bei denen die UI-Ausgabe und API-Antworten den gleichen Inhalt zurückgeben. – mario

Verwandte Themen