You are not logged in.

  • Login

1

Monday, February 23rd 2009, 10:13am

[MVC] Controller URL-Mapping

Hallo Gemeinde,

ich bin gerade dabei mir ein kleines MVC-Framework zu schreiben, das soll an sich total unspektakulär sein. Jedoch habe ich da eine Anforderung an die Urls. Die Urls sollen so gestaltet werden:

/module/controller/action/var1/value1/var2/value2/varN/valueN

so nun ist meine Frage wie kann ich das realisieren das mein Controller solche Urls versteht. Ich müsste mir ja dazu ein eigenes URL-Mapping schreiben und einen eigenen Request/Response. Um $_POST / $_GET zu bedienen.

Kann mir da jemand einen Tipp geben, wie man sowas realisieren kann? Mir fehtl da etwas der Ansatz.

Das ganze soll ohne Mod_Rewrite gelöst werden.

Kann mir jemand mal einen kleinen Denkanstoß geben?

so long
jd

2

Monday, February 23rd 2009, 3:30pm

Hmm ohne mod rewrite ... :o

Mir würde folgendes dirty work around einfallen:

via reflection api alle Methoden usw. von deiner Klasse auslesen,

Dann viele nette Ordner erstellen welche alle eine index file haben welche dann quasi den framework aufrufen ,...



Naaajaa, guut also ich wüsste nicht wie man das sonst lösen soll, da php ja nunmal nach dem parsen der URL aufgerufen wird...

Wieso eigentlich ohne mod_rewrite?



Ich hoffe ich liege mit meiner Aussage falsch, weil an einer Implementierung ohne mod_rewrite oder ähnlicher Dinge wäre ich auch interessiert :love:

3

Monday, February 23rd 2009, 3:38pm

Also das einzige was ich mit Mod_Rewrite machen möchte, ist das alle Anfragen über die Bootstrap Datei laufen:

Bash

1
2
RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css|txt)$ index.php


so, den rest Soll jetzt Quasi der Controller machen, bzw der Router.

Vom Prinzip her, muss ich ja die URL auseinander nehmen, und dann richtig routen... ist etwas leichter gesagt als getan, habe mir das total easy vorgestellt. Jedoch habe ich da irgendwo nen Denkfehler, den ich nicht finde...

Also ich wüsste schonmal wie ich die Url zerlegen kann, das ist nicht weiter schwer. Jedoch muss ich den Request abfangen und PATH_INFO und solche sachen selber neu zusammen bauen.
den /module/controller/action/var1/1

ist ja ein Redirect.

sagt mir jedenfalls

PHP Quellcode

1
2
3
<?php
print_r($HTTP_SERVER_VARS);
?>


Also mir fehlt komplett der Ansatz...

4

Monday, February 23rd 2009, 3:44pm

Also rule würde ich z.B. das nehmen:



Bash

1
(.*) index.php?p=$1






Gut ich sitz gerade nicht an meinem Rechneru nd weiß nicht ob das so wirklich richtig ist.



Als naechstes z.B via explode

PHP Quellcode

1
$_Route = explode('/', $_GET['p']);


Und dann kannste aus den ersten elementen klassennamen usw holen, und dann halt immer im wechsel varname und value.

5

Monday, February 23rd 2009, 3:58pm

Ohne Mod Rewrite ? :wacko:

Meiner Meinung nach benötigst du mod_rewrite um alle Anfragen erstmal abzufangen und an den Front Controller zu routen.

Der kann dann wiederum die Anfrage an weitere Sub Controller Routen der deine URL auseinander nimmt und dann alles dem angegebenen Action Controller übergibt.

Edit:
sonst schau dir doch einfach das ZF an:
http://framework.zend.com/manual/de/zend.controller.html

6

Monday, February 23rd 2009, 4:13pm

sonst schau dir doch einfach das ZF an:
http://framework.zend.com/manual/de/zend.controller.html
Genau diese Empfehlung hätte ich da auch für dich - oder halt andere Frameworks. Ohne mod_rewrite ist es auf Apache-Servern meines Wissens nicht möglich, derartige Anfragen umzusetzen. Framworks benutzen die von dir vorgeschlagene Methode, in der alle Anfragen auf eine Datei umgeleitet werden.

Similar threads

Social bookmarks