Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Code in MVC

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Code in MVC

    Hallo Community,

    ich bin gerade dabei, mich mit Routing und MVC auseinander zusetzen. Beim MVC stelle ich mir die Frage, wie es sauber möglich ist PHP Code zu implementieren?

    Beispielsweise ich hab mein Model, View und Controller - die Daten stammen aus dem Model d.h. ich binde über mein Model den PHP-Code ein?

    BeispielModel.php
    PHP-Code:
    class BeispielModel implements iModel {
       public static function 
    getCode() {
          
    // richtiger Weg?
          
    return file_get_contents('file.php');
       }


  • #2
    Hallöchen,

    das Einbinden von PHP-Code läuft i.d.R. über einen Autoloader (Empfehlung: composer). Auch empfehle ich dir, das Ganze nicht zu kompliziert zu machen. Für'n Anfang reicht es, wenn du dir bspw. nikic/FastRoute zulegst und damit Routes an Controller-Actions mappst. Innerhalb der Controller-Actions tust du im Prinzip nichts anderes als deine Business-Logik (die du bspw. in die Models packst) zu verdrahten und daraus ein Response-Objekt zu stricken. Ich empfehle dir die Request- und Response-Klassen von Symfony zu verwenden (symfony/http-foundation).

    Wenn du das gepackt hast, gehst du einen Schritt weiter: du bindest bspw. PHP-DI ein um die Abhängigkeiten deiner Objekte automatisch aufzulösen und verlagerst die Erzeugung des Response-Objekt in eine höhere Ebene, sodass deine Controller nur noch Daten zurückliefern und keine Berührung mehr mit Request- und/oder Response-Objekten haben.

    So zumindest halte ich das seit Ewigkeiten und es ist eine unheimlich schlanke Vorgehensweise.

    Viele Grüße,
    lotti
    [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

    Kommentar


    • #3
      Hallo lotti,

      ich danke für deine Vorschläge - ich möchte jedoch weder Symfony noch ein anderes Framework im Moment verwenden. Einen Autoloader habe ich bisher noch nie verwendet, ich werde mich in diese Materie einlesen - es ging' mir jedoch mehr darum, wie ich spezielle Skripte einbinden kann. Mittels Router rufe ich bestimmte Controller mit bestimmten Funktionen auf, soll dieser Controller nun dass Model aufrufen und meine Frage lautet im Prinzip, wie dieses Model mir den jeweiligen Code am Schönsten liefert?

      Falls ich dich falsch verstanden hab, bitte ich um Verzeihung.

      PHP-Code:
      <?php
      class BeispielModel implements iModel {
          
      // ist dieser Weg die richtige Art einen externen Code einzubinden?
          
      public static function getCode($file) {
              return 
      file_get_contents($file '.php');
          }

          
      // oder diese Weg?
          
      public static function getCode($file) {
              return 
      '<?php echo "Dies ist mein code."; ?>';        
          }

          
      // oder soll der Code in eine Datenbank gelegt werden?
          
      public static function getCode($file) {
              
      $db    =    DB::select("SELECT `content` FROM `" $file "` LIMIT 1");
              return 
      DB::fetch($db);
          }

          
      // oder gibt es gar einen gänzlich anderen Weg?
      }
      ?>

      Kommentar


      • #4
        Hallöchen,

        Zitat von Rier Beitrag anzeigen
        ich möchte jedoch weder Symfony noch ein anderes Framework im Moment verwenden.
        Du musst kein Framework im vollen Umfang nutzen. Ein paar wenige Komponenten reichen für eine solide Basis meist schon aus (Symfony-Http, FastRoute, PHP-DI, Twig..).

        Zitat von Rier Beitrag anzeigen
        Einen Autoloader habe ich bisher noch nie verwendet, ich werde mich in diese Materie einlesen - es ging' mir jedoch mehr darum, wie ich spezielle Skripte einbinden kann.
        Genau darum geht es ja auch dem Autoloader. Der Autoloader lädt Klassen dort wo du sie brauchst. Es macht auch keinen Sinn, erstmal ohne Autoloader zu starten denn a) ist es super simpel einen Autoloader aufzusetzen und b) ist der in großen Projekten nicht wegzudenken und dessen Verwendung quasi Industriestandard.

        Zitat von Rier Beitrag anzeigen
        Mittels Router rufe ich bestimmte Controller mit bestimmten Funktionen auf, soll dieser Controller nun dass Model aufrufen und meine Frage lautet im Prinzip, wie dieses Model mir den jeweiligen Code am Schönsten liefert?
        Ein Model liefert keinen Code aus. Ein Model ist letztlich eine einfache Klasse die irgendwelche Aufgaben erfüllt. "Code ausliefern" tut man nicht und wenn ich mir dein Beispiel so angucke, glaube ich, dass du da noch ein wenig auf dem Holzweg bist. Schau dir das Autoloading-Konzept von Composer an - es tut genau was du brauchst.

        PHP-Code:
        <?php
        class BeispielModel implements iModel {
        // ist dieser Weg die richtige Art einen externen Code einzubinden?
        public static function getCode($file) {
        return 
        file_get_contents($file '.php');
        }

        // oder diese Weg?
        public static function getCode($file) {
        return 
        '<?php echo "Dies ist mein code."; ?>';
        }
        }
        ?>
        Alles Murks. Klassen liefern keinen PHP-Code aus, sie sind nämlich bereits PHP-Code. Wenn du "den Code einer Klasse" nutzen willst, musst du ein Objekt instanziieren. Dass du ein iModel-Interface brauchst, wage ich ebenfalls zu bezweifeln.

        PHP-Code:
        $model = new BeispielModel;
        $model->doSomething(); 
        Viele Grüße,
        lotti
        [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

        Kommentar

        Lädt...
        X