2010-12-13 4 views
3

Ich habe Magento & PHP CodeIgniter MVC seit etwa 4 Monaten verwendet. Ich habe ein eigenartiges Problem zu verstehen, wo die Validierungslogik für beide CodeIgniter & Magento gesetzt werden, nur wenn ich überlege, die MVC-Architektur zu seiner wahren Natur & in einer sehr angemessenen semantischen Art und Weise zu folgen.Allgemeine MVC Fragen zu PHP und Magento Validierungen

Zunächst einmal werde ich mit Magento beginnen: -

Sagen wir, ich habe ein „Assignment“ Modul in Magento, die über Spieler ist & Turniere beide. Ich habe 3 Aktionsmethoden, in diesem "Assignment" Modul des Controllers, wo ich brauche & validieren folgende zu überprüfen: -

  1. Spielernummer ist auch
  2. Turnier ID

Diese Validierung erforderlich die Bausteinklasse "Assignment" Modul, zusammen mit den 3 Aktionsmethoden.
Also meine Abfrage sollte ich die Validierungen für die oben genannten 2 Punkte in diesem Modul der Controller-Klasse oder in der Model-Klasse schreiben, weil ich die Validierungen sowohl in der Block-Klasse & auch in der Controller-Klasse verwenden müssen?

Auch was schlägt die tatsächliche MVC-Architektur in diesem Fall vor?

Wenn möglich, geben Sie bitte ein Code-Snippet an, das die Logik Ihrer Implementierung hervorhebt.

In Bezug auf CodeIgniter oder andere PHP MVC Framework: -

Seit Validierung etwas Sitzungen mit recht seitenspezifische & da es kein Konzept der Blöcke in CodeIgniter ist, so normalerweise Sitzung Validierungen & Einstellung von Session-Variablen sind erfolgt nur in der Controller-Klasse.

Also meine Abfrage in dieser Hinsicht ist, dass dies eine richtige Annäherung ist & unter welchen Umständen setze ich Setter von Sitzungen & Sitzungsvalidierungen in der Model-Klasse?

Und noch einmal, was schlägt die tatsächliche MVC-Architektur in diesem Fall vor?

Und noch einmal, wenn möglich, bitte geben Sie ein Code-Snippet, Hervorhebung der Logik Ihrer Implementierung.

Ich bin wirklich in Verwirrung Zustand in Bezug auf diese & Ich bin irgendwie hier stecken. Bitte hilf mir hier. Jede Lösung/Hilfe wird sehr geschätzt. Vielen Dank im Voraus.

EDIT: -

Wenn möglich, geben Sie bitte einig Magento-Code auf, wie & richtige Validierungen erstellen schreiben, zusammen mit Ausnahmen werfen, die tatsächlichen Ausnahmemeldungen in dem Modell Methoden definiert?

Antwort

5

Der Model-Layer sollte in der Lage sein, seine eigene Konsistenz beizubehalten. Daher sollten Sie Ihre Validierungen unabhängig von anderen Entscheidungen in die Model-Ebene einbeziehen.Um dem Benutzer zu helfen (und hilfreichere Validierungsnachrichten bereitzustellen), möchten Sie möglicherweise auch eine Überprüfung auf der Controller-Ebene durchführen.

Der Vorteil dieses Ansatzes besteht darin, dass die Wahrscheinlichkeit, dass ein Rogue-Controller fehlerhafte Daten einstellt, unter der Annahme besteht, dass Sie Ihre Modellschicht pflegen. Dies spielt Ihre zweite Frage, für die die Magento-Antwort sein würde, ein Objekt zu verwenden, um Daten in Teilen der Sitzung zu verwalten und diese Daten auf dem Weg in die Sitzung zu validieren.


Als beiseite, mit Validierungen in Ihrer Blocks/Ansichten umgehen, sollten Sie wie folgt mit Validierung. Es hat seine eigenen Fehler, aber minimiert im Allgemeinen die Menge an Validierungscode, den Sie schreiben müssen:

// make sure that the below returns the relevant assignment model class 
$assignment = $this->getAssignment(); // or get it via a session, or helper, or what have you. 
$player = getChosenPlayer(); 


try { 
    $assignment->setPlayer($player); //throws exception when invalid 
    ... do more ... 
    $assignmnent->save(); 
} catch(SomeException $e) { 
    addValidationError($e->getMessage()); 
    renderPageAgain(); 
}