Ankündigung

Einklappen
Keine Ankündigung bisher.

HMVC - Requests aus Templates

Einklappen

Neue Werbung 2019

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

  • HMVC - Requests aus Templates

    Hallo,

    in einer HMVC-Architektur sollen die nötigen Module/Controller ja vom Template aus aufgerufen, oder zumindest verlinkt werden. (Richtig?)

    Das APF erledigt dies über eine XML ähnliche Syntax, die dann vom Page Controller geparst wird. Z.B.
    PHP-Code:
    <core:importdesign namespace="sites::testwebsite::pres::templates" template="header" /> 
    Ich würde dafür aber gerne PHP verwenden. Aber da ich mit file_get_contents($template) den Inhalt des Templates einlese und über echo wieder ausgebe, wird mein PHP Code nicht ausgeführt.
    Gibt es einen Weg, z.B. folgendes im Template zu schreiben
    PHP-Code:
    <?php Page::request("module"); ?>
    ohne dass ich den Code dann auch wieder selbst parsen muss? Dann kann ich gleich XML nehmen
    Ich könnte zwar eval() oder Output Buffering verwenden, aber ich bin sicher es gibt eine andere, saubere Lösung.

    Ich kann mich erinnern, dass ich in einem anderen Framework mal sowie wie
    PHP-Code:
    <?php echo Request::factory("module"?>
    gesehen habe.

    Irgend welche Ideen?


    Gruß,
    John

  • #2
    Ich verstehe die Frage nicht. Wenn die Templates ausgeführt werden (also bspw. include, eval oder normaler Funktionsaufruf) spricht nichts dagegen.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      Output Buffering
      Was soll daran unsauber sein ?
      Signatur:
      PHP-Code:
      $s '0048656c6c6f20576f726c64';
      while(
      $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

      Kommentar


      • #4
        Zitat von nikosch Beitrag anzeigen
        Ich verstehe die Frage nicht. Wenn die Templates ausgeführt werden (also bspw. include, eval oder normaler Funktionsaufruf) spricht nichts dagegen.
        Da ich aber die einzelnen Templates (also das Haupt-Template mit den ganzen Modulen bzw. Sub-Templates) zu einer kompletten Seite zusammenbauen muss, kann aber kein include verwenden, sondern muss die einzelnen Templates über file_get_contents() einlesen.
        Wäre es nicht unsicher oder zumindest unsauber, wenn ich dann die PHP-Codes aus den Templates mit eval() ausführe?

        Kommentar


        • #5
          Das kaommt darauf an, wo die Abhängigkeiten modelliert sind. Das ist auch der Vorteil von statischen Inhalten - die kann man vorparsen.
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #6
            Zitat von ByStones Beitrag anzeigen
            Was soll daran unsauber sein ?
            Ok, unsauber nicht wirklich. Aber ich hab das so noch nie gesehen, was aber natürlich nichts heißen muss...
            Zitat von nikosch Beitrag anzeigen
            Das kaommt darauf an, wo die Abhängigkeiten modelliert sind. [...]
            Welche Abhängigkeiten meinst du?


            Wie lösen das denn andere?

            Kommentar


            • #7
              Na Abhängigkeiten von Modulen untereinander, von Elternmodulen oder aktuellen Applikationseinstellungen.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Hallo JohnT,

                dein PHP-Code im Template soll im Fall des APF aus Sicherheitsgründen auch nicht ausgeführt werden. Vielmehr erledigt in einer HMVC-Struktur die Arbeit auch ein Controller. Dieser darf und soll natürlich PHP-Code enthalten und ausführen genau wie die Funktion deines Moduls das erfordert.

                Nun frage ich mich, wo das Problem ist? Hast du mal ein konkretes Beispiel? Ich vermute eher, dass du das HMVC-Pattern nicht korrekt interpretierst.
                Viele Grüße,
                Dr.E.

                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                1. Think about software design [B]before[/B] you start to write code!
                2. Discuss and review it together with [B]experts[/B]!
                3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                4. Write [I][B]clean and reusable[/B][/I] software only!
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                Kommentar


                • #9
                  Zitat von dr.e. Beitrag anzeigen
                  dein PHP-Code im Template soll im Fall des APF aus Sicherheitsgründen auch nicht ausgeführt werden. Vielmehr erledigt in einer HMVC-Struktur die Arbeit auch ein Controller.
                  Hallo dr.e., mit PHP-Code in den Templates meine ich natürlich nicht die Applikationslogik, sondern nur den Aufruf eines weiteren Templates und/oder das Einbinden eines zugehörigen Controllers.


                  Erstmal geht es mir nur darum, wie ich in ein Template andere (Sub-)Templates einbinden kann und den jeweiligen Controller aufrufe.


                  Hier mal mein einfacher Code:
                  index.php
                  PHP-Code:
                  <?php

                  include 'core/PageController.php';

                  $page = new Page();
                  $page->loadTemplate('app/site/website.html');
                  echo 
                  $page->transform();

                  ?>
                  PageController.php
                  PHP-Code:
                  <?php

                  class Page
                  {
                      public 
                  $content;

                    
                      public function 
                  loadTemplate($file)
                      {
                          
                  $this->content file_get_contents($file);
                      }

                      public function 
                  transform()
                      {
                          return 
                  $this->content;
                      }

                      public function 
                  request($file)
                      {
                          
                  /* Sub-Template laden, zugehörigen Controller ausführen */
                          
                  echo "Wird hier nichtmal erreicht";
                      }
                  }

                  ?>
                  website.html
                  PHP-Code:
                  <html>
                  <head></head>
                  <body>
                      <h1>Module 1:</h1>
                      <?php echo Page::request("module_1"); ?>
                  </body>
                  </html>
                  Das Problem ist nun, dass ich dem Page Objekt irgendwie mitteilen muss, welches Templates/welcher Controller geladen werden soll, aber "Page::request("module_1");" nichtmal ausgeführt wird.

                  Wie im ersten Post erwähnt könnte ich wie beim APF eine XML-Syntax verwenden, die dann geparst wird. Aber ich möchte eben einen PHP-Aufruf bzw. wenn was im Template ausgegeben werden soll ein PHP-Echo.

                  Kommentar


                  • #10
                    Hallo JohnT,

                    warum nutzt du dazu eigentlich nicht das APF, das bereits die dafür notwendige Logik bereitstellt? Das Rad neu zu erfinden ist bei diesem Thema nicht gerade sinnvoll.

                    Möchtest du im APF ein weiteres Sub-Template (das ein Modul repräsentiert) einbinden, so reicht dir überall im Baum ein einfaches

                    Code:
                    <core:importdesign namespace="my::namespace" template="my_module" />
                    Der Page-Controller analysiert das dann für dich und baut den resultierenden DOM-Baum auf.
                    Viele Grüße,
                    Dr.E.

                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    1. Think about software design [B]before[/B] you start to write code!
                    2. Discuss and review it together with [B]experts[/B]!
                    3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                    4. Write [I][B]clean and reusable[/B][/I] software only!
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                    Kommentar


                    • #11
                      Ich würde gerne selbst die Grundlagen verstehen und anwenden können. Wenn ich dann mal ein Projekt habe, kann ich immer noch eine bestehendes Framework verwenden.

                      Hat jemand noch eine Idee oder sonstwas?

                      Was ich nicht verstehe, zu MVC gibt's fast 100 Artikel mit Code, für HMVC nicht einen mit PHP.

                      Kommentar


                      • #12
                        Hallo JohnT,

                        Ich würde gerne selbst die Grundlagen verstehen und anwenden können. Wenn ich dann mal ein Projekt habe, kann ich immer noch eine bestehendes Framework verwenden.
                        Die Grundlagen zu verstehen und anwenden zu können wiederspricht sich nicht mit der Idee ein Produkt einsetzen zu wollen. Im Gegenteil, es ist kompliziert genug ein Produkt selbst zu verstehen, das ein Pattern implementiert, entlastet dich aber im Gegenzug vom Aufwand, das Pattern selbst implementieren zu müssen.

                        Ich möchte dir als Hilfestellung auch ein wenig die Illusion nehmen, HMVC in der Kürze der Zeit durchdringen zu können, wie man das vielleicht bei MVC kann. Aber selbst MVC haben 60% der Leute im PHP-Bereich nicht verstanden (siehe regelmäßige Posts in den einschlägigen Foren). Zu HMVC findest du allein schon deshalb im PHP-Bereich nicht viel, weil es tatsächlich nicht viel gibt. Das APF ist das einzige Framework, dass das Pattern in der generischen Form implementiert.

                        Was die Implementierung des Pattern angeht, habe ich bereits in diversen Foren und Diskussionen die Idee dazu dargelegt. Damit sollte das Konzept klar und verständlich sein. Darüber hinaus gibt es zum APF eine Dokumentation die das Konzept, das Timing-Modell und die Mechanismen von MVC-DOM-Knoten erläutert. Siehe



                        Ohne arroganz klingen zu wollen (und was man dir im JAVA-Bereich schon nach dem ersten Post geraten hätte): suche ein Tool, das HMVC kann, lerne es zu verstehen und anzuwenden!

                        Da letzters schon genug Arbeit macht, ist jetzt - vor einem Projekt - der ideale Zeitpunkt.
                        Viele Grüße,
                        Dr.E.

                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                        1. Think about software design [B]before[/B] you start to write code!
                        2. Discuss and review it together with [B]experts[/B]!
                        3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                        4. Write [I][B]clean and reusable[/B][/I] software only!
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                        Kommentar


                        • #13
                          Das APF ist das einzige Framework, dass das Pattern in der generischen Form implementiert.
                          Korrigiere mich, wenn ich falsch liege, aber der Ansatz des Kohana-Framework ist für mich ebenfalls generisch - Es ist nur nicht per GUI umgesetzt, sondern mittels Funktionsaufruf.

                          Kommentar


                          • #14
                            Hmm. Hatten wir da nicht schon mal drüber gesprochen? Meiner Ansicht nach ist der Ansatz von Kohana nicht generisch, weil du die Struktur kennen und daraufhin deine Module/MVC-Knoten einbinden musst. Die Einbindung erfolgt dabei nicht nach dem composite-Prinzip, sondern erzeugt explizite Abhängigkeiten, die ich wegen separations of concerns nicht haben möchte.
                            Viele Grüße,
                            Dr.E.

                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            1. Think about software design [B]before[/B] you start to write code!
                            2. Discuss and review it together with [B]experts[/B]!
                            3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                            4. Write [I][B]clean and reusable[/B][/I] software only!
                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                            Kommentar


                            • #15
                              Hmm. Hatten wir da nicht schon mal drüber gesprochen?
                              Weiß ich nicht - kann sein

                              weil du die Struktur kennen und daraufhin deine Module/MVC-Knoten einbinden musst.
                              Schon - aber was ist daran nicht generisch? Schließlich musst Du ja auch wissen, wie Deine Tag-Libs heißen.

                              Die Einbindung erfolgt dabei nicht nach dem composite-Prinzip, sondern erzeugt explizite Abhängigkeiten
                              Was für Abhängigkeiten meinst Du?

                              separations of concerns
                              Das verstehe ich auch nicht - Du verteilst doch die Aufgaben, egal, wie die Implementierung von hmvc jetzt aussieht.

                              Kommentar

                              Lädt...
                              X