Ankündigung

Einklappen
Keine Ankündigung bisher.

Router ohne mapping

Einklappen

Neue Werbung 2019

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

  • Router ohne mapping

    Hallo zusammen,

    ich habe jetzt einen Router geschrieben der mir Controller, Methoden und Parameter über die Url aufruft.
    Sprich bei der Url /user/add/Peter wird der Controller user geladen, die Methode add aufgerufen und als Parameter Peter übergeben.
    Ich hab das alles ohne Routenmapping wie bei manchen Frameworks gemacht und hab dazu eine Frage.

    Gibt es mit dieser Configuration Sicherheitsprobleme die ich beachten sollte? Und wieso machen das nicht alle Frameworks so?

    Ich hab zusätzlich einen Default Controller und eine Default Methode festgelegt, falls die Seite aufgerufen wird ohne die Definition in der Url.

  • #2
    Ich würde vor die klasse noch einen namespace hängen und an die Methode beispielsweise ...Action.
    Ich verstehe auch deine Intention, aber es geht noch wesentlich besser.

    Kommentar


    • #3
      Ok das wäre noch eine Idee. Mit dem Router bin ich auch erstmal noch nicht fertig, da auch noch keine globale Variablen wie Post und Get miteinbezogen werden. Aber dafür will ich vielleicht ein Request Pattern verwenden.

      Muss mir auch noch überlegen was bei meinem Routing noch schief gehen könnte um Fehler abzufangen.

      Wozu machen denn die meisten Frameworks Routermapping? Den einzigsten Vorteil darin sehe ich, das nur bestimmte Methoden aufgerufen werden können. Bei mir können momentan alle Public definierten Methoden aufgerufen werden, da überleg ich mir aber auch noch was.

      Kommentar


      • #4
        Ich kann jetzt nur für meinen Router/Dispatcher sprechen. Bei mir steht nicht nur dabei, welcher ActionController und welche Methode aufgerufen werden sollen, sondern auch mit welchen Parametern (von get oder post. Wichtig: CSRF). Sowas wie ein Requestobjekt brauche ich dadurch nicht mehr.

        Beim instanziieren des Controllers muss dieser nicht mehr von einer bestimmten Controllerbasisklasse ableiten und bekommt zudem noch via Constructorinjection konfigurierbar Services injiziert.

        Kommentar


        • #5
          https://gist.github.com/Golpha/1db1443f7a3decd5f444
          [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


          • #6
            Du musst von keiner Controllerbasisklasse ableiten? Definierst du Variablen die zB für Template oder View zuständig sind immer neu?

            Kommentar


            • #7
              View-Factory -> Service
              [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


              • #8
                Von Factorys habe ich schon was gelesen. Aber da ich noch Anfänger bin habe ich bisher in keinem Projekt irgendwas davon verwendet ^^. Wird wohl langsam Zeit.

                tr0y: Die Methode executeCurrentRoute von der SPCRouter Klasse ist ja mal ziemlich fies... also ziemlich lang ^^. Ich glaub mein Netbeans meckert schon bei mehr als 15 Zeilen Code für eine Methode.

                Kommentar


                • #9
                  Ich würde Netbeans deinstallieren.

                  *PHPStorm streichel*
                  [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


                  • #10
                    Ich mecker schon bei mehr als 10 Zeilen pro Methode . Naja, ab und an werden es bei mir auch mal 15 oder so. Bzgl. Template-Variablen: Ich hoffe, dein Controller weiss nichts von der Existenz eines Views. Zumindest nicht, wenn deine Controller Kontextflexibel eingesetzt werden können sollen. Ich poste nachher mal etwas code. Jetzt geh ich erst mal feiern.

                    Kommentar


                    • #11
                      //OT:
                      Zitat von rkr Beitrag anzeigen
                      Ich poste nachher mal etwas code. Jetzt geh ich erst mal feiern.

                      Du gehst umhalb zehn los und bist danach noch fähig code zu posten?
                      Die jugend von heute ist echt lasch

                      Kommentar


                      • #12
                        Cronjobs, moma, Cronjobs.
                        [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


                        • #13
                          So ganz jung bin ich dann auch nicht mehr
                          "Nachher" ist dehnbar

                          Kommentar


                          • #14
                            @tr0y: wenn ich anfangen sollte häufiger zu programmieren wäre PhpStorm sicher angebracht. Mag halt momentan die kostenlose Alternative

                            @rkr: zu dem Controller hab ich noch nichts geschrieben. Hab bisher nur die Routerklasse und 1-2 andere.

                            "Nachher" ist nicht so dehnbar wie zB "bald"

                            Kommentar


                            • #15
                              Dein Router sollte im übrigen keine "defaults" kennen, da diese Komponente nur sagen soll ob eine registrierte Route auf den aktuellen Request anwendbar ist. Die Route-Instanz mag dann bestenfalls informationen über ein aufzurufendes Callback haben, alles was darüber hinaus geht bindet dein Router an etwas das unnötig ist. Das ist auch der Grund warum die meisten Router Callbacks zu routes Assoziieren und keine Controller.

                              Du kannst dich da gerne an diverse Router der großen Frameworks orientieren oder optimaler Weise an: https://github.com/nikic/FastRoute ( dessen Prinzip ich aktuell als kleverste Lösung halte )
                              [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

                              Lädt...
                              X