Einzelnen Beitrag anzeigen
  #34 (permalink)  
Alt 22.12.2010, 12:24
Benutzerbild von mantiz
mantiz mantiz ist offline
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.845
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Der Router ermittelt den Controller und die Action, welche aufgerufen werden soll anhand eines Strings.
Ich verwende dazu im Frontcontroller die RequestUri, aber man könnte auch einen GET-Parameter verwenden oder sonstwas.

Routen können dann z.B. so aussehen:
Code:
<auth>
	<route>/:action/*</route>
	<defaults>
		<controller>auth</controller>
		<action>login</action>
	</defaults>
	<regex>
		<action>login|logout</action>
	</regex>
</auth>
Im Grunde ist das ähnlich dem Regex-Router von Zend. Und CakePHP macht es, wenn ich mich recht erinnere, auch so ähnlich.
Die Route wird in einen regulären Ausdruck übersetzt und geprüft, ob dieser Ausdruck auf den String passt, dann werden anhand dessen die Variablen (hier nur action) und Übergabe-Parameter (alles was auf * passt) bestimmt und ggfs. die Defaults gesetzt.
Anschließend werden noch die Variablen gegen die Ausdrücke in "regex" geprüft, wenn alles stimmt, wird die Route verwendet.
Hier wird die Action auf "login" und "logout" beschränkt, die Route passt also nur für Anfragen der Form "/login", "/login/*", "/logout", "/logout/*".
Der angegebene Controller-Name ist ein eindeutiger Schlüssel für den Controller.

Die Config vom Controller sieht dann so aus:
Code:
<controllers>
	<auth>
		<class>Auth_Controller</class>
		<loginRedirectUrl>/admin</loginRedirectUrl>
	</auth>
</controllers>
Der Auth-Controller stellt bei mir das Login-Formular dar und führt bei einem Post-Request einen Login durch.
Man kann aber auch einen anderen Auth-Controller schreiben und diesen so ziemlich simpel in der Config ändern.

Die ganze Config scheint aufwendig zu sein, aber bei manchen Frameworks ist das so, dass diese einfach ein festes URI-Schema verwenden, was dann so ähnlich aussieht wie: /<controller>/<action>/<params>.
Wobei der default von <controller> und <action> meistens auf "index" gesetzt wird und die Parameter natürlich optional sind.
Das bedeutet aber, dass die URIs quasi fest vorgegeben sind, die Controller müssen also entsprechend den gewünschten URIs benannt werden.
Und genau dafür ist der Router da.
Mit Zitat antworten