Einfachere / "sinnvollere" (Flexible)Routes

  • App
    WoltLab Suite Core

    Hallo,


    gleich vorweg: #sorryNotSorry für den langen Text. :P
    Ich habe vor einigen Tagen es mir zur Aufgabe gemacht, meinen eigenen Bilderhost-Dienst, der nun doch schon seit zwei Jahren existiert (aber niemand kennt haha) von Grund auf neu zu programmieren.
    Da das System bisher eher zweckdienlich programmiert wurde, wollte ich unbedingt ein Framework nutzen. Zunächst war ich der Meinung, dass das WCF eine gute Wahl wäre, habe ich doch schon einiges an Erfahrung damit und könnte sicher den Großteil des Systems alleine dafür programmieren. Jetzt war es aber so, dass ich schon vor einiger Zeit etwas "größeres" für das WCF programmiert hatte, nämlich ein Frontend, wenn man so will, für meinen Hitbox.tv-Chatbot, wo man neue Befehle hinzufügen, sehen und bearbeiten kann.


    Ursprünglich wollte ich, dass man über domain.com/commands/<username> die Seite erreichen kann, auf denen die benutzerdefinierten Befehle des Benutzers <username> zu sehen waren.
    Nach EINIGEM an Recherche, wie FlexibleRoutes im WCF genau funktionieren und mindestens nochmal so viel Hilfe durch jemanden, der sich besser auskennt, habe ich das auch tatsächlich hinbekommen.


    Bekannterweise sehen die Standardroutes im WCF ja so aus: domain.com/<page>/<id>-<title>. Aus praktischen Gründen wollte ich aber auf keinen Fall eine ID im Titel haben, da die entsprechenden Nutzer ihre Befehlsseite schnell und einfach erreichen sollten, sprich einfach ihren Usernamen an die URL anhängen und fertig.


    Spätestens aber bei der Suchfunktion war die ID ein zwingender Parameter und ich musste doch wieder auf die Standardroutes umsteigen, leider.
    Meines Wissens nach bietet hier das WCF keine einfachere Methode, dieses Ziel zu erreichen, da es schlicht an einer guten Dokumentation fehlt (oder die entsprechende Klasse es einfach nicht kann).


    Hinzukommt, dass beispielsweise das Fireball-CMS von @codeQuake ebenfalls "Probleme" mit dem Routing-System des WCFs hat.
    Beispielsweise müssen alle benutzerdefinierten Seiten, die im ACP für das CMS erstellt werden, ein, ehrlich gesagt nerviges, page als Präfix haben. Beispiel: Ich erstelle die Seite "Hilfe" und möchte, dass sie über domain.com/help erreichbar ist.
    Durch die offensichtlichen Einschränkungen durch das Routing-System musste beim Fireball-CMS nun eben beschriebenes Präfix genutzt werden. Es war also nicht möglich domain.com/help als Link für die erstellte Seite zu haben, sondern der Link wurde zu domain.com/page/help.


    Wie genau die technischen Hintergründe dafür jetzt sind, weiß ich nicht. Ich weiß aber, dass einige Benutzer sich schon darüber beschwert hatten und den Entwicklern leider die Hände gebunden waren, da es keine Lösung dafür geben soll.


    Zurück zum Thema:
    Ich schreibe also meinen Bilderhoster neu. Als Framework wollte ich das WCF als Basis nehmen, durch das mangelhafte Routing-System (und einigen anderen Dingen, für die das WCF aber fairerweise nicht direkt was kann [es wären umfrangreiche Template-Änderungen nötig]), entschloss ich mich also, doch ein anderes Framework zu benutzen.
    Von einem Freund lernte ich schon vor einiger Zeit Laravel kennen. Ein überaus umfangreiches und erstaunlicherweise leicht verständliches PHP-Framework.
    Und dessen Routing-System ist einfach Spitze.


    Dort erstellt man eine Route beispielsweise einfach so:


    PHP
    Route::get('commands/{username}', 'CommandController@showCommandsForUsername');

    Das ist nur eine einzige Zeile, die nötig wäre, um mein gewünschtes Szenario von weiter oben zu erreichen: domain.com/commands/<username>. Und Laravel routet die Anfrage dann einfach zur gewünschten Klasse: CommandController und führt dort die Methode showCommandsForUsername($username) aus.



    Was ich nun mit diesem Thema eigentlich bezwecken will:
    Ich bin mir ziemlich sicher, dass das Routing-System vom WCF schon von einigen anderen Usern bemängelt wurde und ich würde mir wünschen, dass es, zumindest für das WCF 2.2 oder WCF 2.3, hinreichend überarbeitet wird, damit es beispielsweise auch so einfach zu bedienen ist, wie das Routing-System von Laravel (und anderen Frameworks).


    Danke für deine Aufmerksamkeit, falls du alles bis hierher gelesen hast :P

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!