CakePHP bietet von Haus aus ein sehr flexibles System um URL auf Controller und Action umzusetzen. Viele URLs sehen deshalb etwas so aus:
http://meinedomain.de/users/view/username
Der Controller ist also users>.
Die Action heißt in dem Fall view.
Der dritte Teil wird dann als Parameter in die Action des Controllers übergeben und kann einfach über
function view($username)
verarbeitet werden.
In vielen Fällen wäre es aber schöner, wenn die URL einfach so aussehen würde:
http://meinedomain.de/username
Mit Hilfe der Klasse Routes lässt sich das auch so oder so ähnlich umsetzen. Im einfachsten Fall würde das so aussehen:
Routes::connect('/*', array('controller'=>'users', 'action'=>'view'));
Allerdings führt das zu dem Problem, dass alle anderen Controller und Actions nicht mehr erkannt werden.
Das kann man recht einfach dadurch lösen, dass man die genutzten Controller vor der oben genannten Route auflistet, was dann in etwa so aussehen würde, wenn man davon ausgeht, dass es noch einen PagesController und einen ProjectsController gibt:
Routes::connect('/pages/*', array('controller'=>'pages', 'action'=>'display')); // nur display
Routes::connect('/projects', array('controller'=>'projects')); // alle actions
Routes::connect('/*', array('controller'=>'users', 'action'=>'view')); // die Usernamen hier zuletzt abfangen.
Vielleicht gibt es dazu ja auch noch eine geschicktere Lösung, aber damit bin ich bisher ganz gut ausgekommen und werde es in Kürze auch auf der Twitter-Anwendung http://21tweets.com einbauen.
