Eigenlijk wel, maar ik houd deze maar even open omdat de topicstarter meer een idee zoekt van de werking van een frontcontroller.
Het is eigenlijk, zoals Thomas v/d Heuvel al eerder zegt, de beste oplossing om met een enkele rewrite rule alles door te verwijzen naar de index.php. Als je dan de $_SERVER['REQUEST_URI'] ontleedt dan kan je alles wat tussen de slashes staat apart in een array-element zetten.
De werking van een frontcontroller in samenwerking met rewrite rules:
http://mijnsite.nl/ gaat naar /index.php
http://mijnsite.nl/about gaat naar /index.php
http://mijnsite.nl/contact gaat naar /index.php
http://mijnsite.nl/contact/confirmation gaat naar /index.php
In index.php wordt vervolgens gekeken wat de opgevraagde route was:
Aan de hand van de route wordt vervolgens een controller aangeroepen. (lees: voor iedere route een aparte controller).
Een controller is een gewone PHP class met een aantal methods (functies)
Iedere (public) method is vervolgens het begin waarin een bepaalde pagina opgebouwd gaat worden. Dit begint doorgaans met het verzamelen van data, meestal uit de database. Vervolgens wordt de HTML opgebouwd.
Voordelen
Er zijn best een aantal behoorlijke voordelen te benoemen. Je hebt bijvoorbeeld geen problemen meer met relatieve paden omdat je altijd vanuit hetzelfde punt begint; namelijk /index.php Een ander voordeel is dat je heel makkelijk een autoloader voor je classes kunt gebruiken waarna je ook geen include of require meer hoeft te gebruiken.
Het komt de beveiliging en de structuur ook ten goede. Als laatste zo even uit het hoofd heb je direct de user-friendly URL's waar ik in het andere topic al over begon. En je bent van de .php extensies af in je url's.
Als ik eerder ben snao ik hier helemaal niks van... Frank Nietbelangrijk? Hoe kan ik daarmee zorgen dat /gebruikersnaam=rob naar /rob wordt veranderd? Ariën? Ik snap niet echt hoe ik daarmee dan die link kan veranderen. Kan iemand mij even precies uitleggen hoe dat werkt en niet doorlinken naar scripts in het engels want daar begrijp ik sowieso al veel minder van.. Alvast bedankt!
In dit geval hoef je geen $_GET te gebruiken omdat alles op de index al wordt aangeroepen. In plaats van $_GET vind je in $path je hele pad in de URL gesplits in een array.
Dus met www.domein.nl/gebruiker/rob zal je op de eerste positie van je array (array's beginnen in PHP bij 0) je naam Rob vinden.
Dus $path[1].
De voodoo gebeurd onderwater, maar de code van de link moet je zelf doen.
Het is niet zo dat er een oplossing is om profiel=?rob "zomaar" ineens als link /rob is.
Aan de hand van de waarde waar op die plek in de URl (in dit geval 'rob' moet je script de juiste gegevens van Rob erbij pakken. Als er Tim staat pak je Tim etc.
Als er helemaal geen gebruiker bestaat met die naam, dan toon je een foutmelding met daarin dat de naam niet bekend is.
Zoals hierboven al geschetst wordt zul je wat extra werk moeten verzetten. Enerzijds zul je functionaliteit moeten hebben die op een of andere manier op grond van het zogenoemde applicatie-pad (het deel van de URL dat van belang is voor je applicatie) bepaalt welke code uitgevoerd moet worden en anderzijds, waar jouw vraag over ging, zul je in je applicatie functionaliteit moeten hebben die deze applicatie-paden genereert. Dit resulteert dus in een soort van "dubbel gelinkte lijst".
Wat je ook nog zou kunnen overwegen is het volgende. Je zou de ontleding van een URL nog verder kunnen opdelen. Volgens mij had @Frank het in een ander recent topic over slugs. Dit zijn in wezen de partjes in de URL die van belang zijn voor je applicatie (en dus ook: de onderdelen waaruit het applicatie-pad is opgebouwd). Alle slugs bij elkaar vormen het applicatie-pad. Voor bovengenoemde functionaliteit zijn applicatie-paden bijvoorbeeld:
gebruiker/rob (slugs: gebruiker, rob)
gebruiker/henk (slugs: gebruiker, henk)
et cetera
De eerste slug is altijd "gebruiker". Als je -heel simpel gesteld- de REQUEST_URI explode op "/" dan heb je meteen alle partjes. Je zou dan de eerste slug ("gebruiker") kunnen gebruiken om bijvoorbeeld gebruiker.php te includen die vervolgens iets met de tweede ("rob", "henk") en volgende slugs doet. Op deze manier houd je je index.php schoon en generiek. Hier wordt immers niets specifieks gedaan met betrekking tot gebruikers, index.php include enkel een ander bestand dat het specifieke werk verricht.