Ankündigung

Einklappen
Keine Ankündigung bisher.

Front Controller- Router

Einklappen

Neue Werbung 2019

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

  • Front Controller- Router

    Schönen guten Tag,
    ich schnipsel mir grade nen front controller zusammen, allerdings stehe ich grade beim Router vor der Frage, ob ich diesem Routes übergeben soll, oder ob er dynamisch arbeitet, und er selbst auf Existenz,... prüft. Letzteres gefällt mir besser. Wenn ich jedoch bei der Umsetzung bin, muss ich natürlich bei dieser Variante stets require_once bei der jeweiligen route machen und ein objekt der jeweiligen action, die geroutet wird, anlegen. Dies gefällt mir persönlich wieder nicht, da ich mit autoloading arbeite. Und ein Router, bei dem man alle Routes eingibt, ist mir zu "steif" und unflexibel. Allerdings könnte man somit wunderbar autoloaden. Könnt ihr mir also Tipps geben, wie ich dies am besten machen soll, und ob dynamische Router cool sind, oder diese (mir noch nicht bekannte) gravierende nachteile haben.


  • #2
    Dynamisches erkennen zwingt dich erstmal in eine namespace- oder dateisystem-struktur. Frei definierbare Routes nicht ( was auch der Grund ist warum in allen aktuellen Frameworks routes frei definierbar sind ). Das Zweite geläufige Feature von Routes sind (dynamische) Url-Fragmente die nicht zwingend in ein klassisches Controller-Action-Schema passen.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Das Zweite geläufige Feature von Routes sind (dynamische) Url-Fragmente die nicht zwingend in ein klassisches Controller-Action-Schema passen.
      Wie meinst?

      Kommentar


      • #4
        Mein Router ist ein einfaches Key-Value-Array mit Lookup. Der Key-Part ist das Url-Muster, der Value-Part ist idR ein Array in dem steht, welche Klasse/Methode mit welchen Parametern aufgerufen werden soll. Und, wie das Ergebnis dieses Methodenaufrufs behandelt werden soll (html, json, etc). Meine Controller sehen dann aus, wie ganz normale Klassen. Ohne Basisklasse, ohne Konventionen. Alle Abhängigkeiten der Klasse (construct), oder der Methode werden vom DependencyInjection-Container automatisch zusammengebaut und übergeben (overheadfreies WünschDirWas-Prinzip). Ich bin damit zu 100% Frameworkagnostisch und kann meine Klassen ohne irgendwelche Anpassungen zwischen verschiedenen Projekten sharen. Theoretisch auch mit Projekten, die auf irgendeinem Framework basieren, da muss ich dann allerdings frameworkspezifische Controller als Adapter mißbrauchen.
        Standards - Best Practices - AwesomePHP - Guideline für WebApps

        Kommentar


        • #5
          ok, hab mich schlussendlich für dynamisch entschieden, da ich keinen wirklichen mehrwert bei der anderen variante sehe. Werde wenns fertig ist ein paar fragmente posten.

          Kommentar


          • #6
            Ich würde dazu auch noch gerne Vor- Nachteile beider Varianten hören. Wenn jemand was hat, immer her damit; allein vom Interesse des Themenstellers her.

            Kommentar


            • #7
              @phpyton,

              naja bei der statischen Variante kannst du dir URLs so gestalten, wie du willst...
              https://github.com/Ma27
              Javascript Logic is funny:
              [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

              Kommentar


              • #8
                Die zwei Hauptnachteile vom automatischen Erkennen hat tr0y doch schon genannt. Der einzige Vorteil der dem gegenübersteht ist ein bisschen weniger Schreibarbeit - wobei die in der Regel minimal ausfällt.

                Kommentar


                • #9
                  Ok, steck grade fest. Ich habe einen Router, der Routes erzeugt und diese über den FrontController an den Dispatcher weitergibt. Der Dispatcher erzeugt aus der Route ein Controller-Objekt. Allerdings bin ich jetzt etwas stutzig, ob dies der Dispatcher direkt machen soll, oder der FrontController darüber und das Objekt dem Dispatcher übergeben soll, oder ich eine factory Methode/Klasse dazu gebrauchen soll, die dem Dispatcher das Objekt überreicht. Was sagt ihr so dazu.

                  Kommentar


                  • #10
                    Du kannst ja mal ausloten, ob du PHP-DI als Dispatcher einsetzen kannst. Sowohl für die Erstellung des ActionControllers (get/make), als auch für den Aufruf der Startmethode (call).
                    Standards - Best Practices - AwesomePHP - Guideline für WebApps

                    Kommentar


                    • #11
                      Ja ne, mir geht es primär nur darum zu wissen, wo der ActionController denn instanziiert werden soll. Soll dies der Router tun, was ich nicht glaube, der Dispatcher, oder der FrontController, und das Objekt dem Dispatcher übergeben. Am ehesten würde ich das dem FrontController überlassen.

                      Kommentar


                      • #12
                        Kommt drauf an. Idealerweise im Frontcontroller und idealerweise von einem Dispatcher wie PHP-DI
                        Standards - Best Practices - AwesomePHP - Guideline für WebApps

                        Kommentar


                        • #13
                          Du gibst wohl nie auf aber meine Antwort hab ich. Und in Sachen DIC bin ich bestens gerüstet, glaub mir.

                          Kommentar


                          • #14
                            Eigentlich ja in einem Controller Resolver, aber es ist sicher unnötig zu sagen das PHP-DI kein voll qualifizierter Dispatcher ist, sondern lediglich ein Dependency Container.

                            Ob man bestens gerüstet ist, ist eine Subjektive Sache, oft überschätzen Anfänger die Situation.
                            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                            Kommentar


                            • #15
                              Zitat von tr0y Beitrag anzeigen
                              PHP-DI [ist] kein voll qualifizierter Dispatcher.
                              Das kannst du bestimmt auch begründen, oder?
                              Standards - Best Practices - AwesomePHP - Guideline für WebApps

                              Kommentar

                              Lädt...
                              X