pl: MVC in PHP-Projekt

Beitrag lesen

Ich weiß nicht, ob es dazu einen Fachbegriff gibt, aber ein Interface ist das nicht. Das ist eher eine Ablaufsteuerung.

Jow. Wenn es immerwieder derselbe Ablauf ist, dann lohnt es sich, über ein Interface nachzudenken. So ist das IF schon der Core in meinem Framework; URL => Klassenbindung, Instanz wird erstellt. Meine IF-Methoden hier:

data() 
   ist für die Beschaffung des Templates zuständig. fehlt die Methode in der Subklasse, wird das Template unterhalb __DATA__ erwartet

init()
   wie der Name schon sagt, initialisiert Attribute

browse()
   wird nur aufgerufen, wenn der Request, KEINE Parameter mitbringt

control()
   wird nur aufgerufen, wenn Parameter im Request sind

trailer()
   kann ggf. auch noch bestimmte Platzhalter setzen

Meine IF Methoden werden aufgerufen, wenn sie in der Subklasse definiert sind. In Jeder IF Methode steht die Instanz der an URL gebundenen Subklasse zur Verfügung. Diese Instanz hält alles zusammen, von Request-Parametern bis zur Datenstruktur, in welcher die Platzhalter mit Werten betankt werden.

Allein schon über den logischen Wechsel browse()/control() lässt sich das View umschalten, indem bspw. ein anderes Template geladen wird.

Die Response schließlich wird gepuffert und nur dann inkl. aller mitgelieferten Header ausgeliefert, wenn es keine Fehler gab. Es können beliebige Content-Types ausgeliefert werden.

Ajax: Hier wird kein Template gerendert sondern nur die Datenstruktur für die Platzhalter serialisiert. Ob das XML, JSON oder binaries sein sollen, bestimmt der Request-Accept-Header.

Nunja, if/else/endif sollte eine TE schon können.

Ach, und warum sollte diese einfache Logik (innerhalb der View) dann nicht gleich als PHP-Code ausgeführt sein? Warum sollte dazu noch ein anderer Code verwendet werden, der erst noch in PHP übersetzt werden muss?

Kann. Im Beispiel hab ich Beides, ein Templatebaustein mit Platzhaltern und eine Bedingung:

--text_html_form-----------------------------------------------------------

    %if_eavchdir%
        <div>%content%</div>
    %else%
        <pre>%content%</pre>
    %endif%

Kannst natürlich auch anders machen. Und machs nicht so kompliziert.pl