Hallo, misschien een erg simpele vraag.

Bij routing voor je website stuur je eigenlijk alle requests door naar 1 pagina. Meestal index.php.
Doe je dan dus ook de POST data daarnaartoe sturen? En hoe doe je die dan weer doorgeven aan de juiste controller?
En hoe doe je alle get variabelen verwerken? Doe je dan iets als $_GET[0], $_GET[1] etc?
Ik begrijp niet echt wat het voordeel is van een router. Je moet telkens de juiste controllers/models/vieuws includen, soms (volgens mij) onnodig een header gebruiken om een gebruiker door te sturen naar de juiste locatie.
Daarnaast lijkt me het controleren van GET variabelen moeilijker, alles doe je rewriten naar mooie URL's,
Dus dit: www.site.nl/help.php?action=view&item=10023 wordt dit: www.site.nl/help/view/10023
Aan de tweede url zou je niet meer kunnen zien of view een map is, of (de waarde van) een veriabale.
Niet dat dit voor buitenaf belangrijk is, of dat bezoekers hier iets mee moeten. Maar hierdoor lijkt het me verwarrend. Ook zou ik niet weten wat ik moet doen als een pagina direct wordt aangeroepen, dus niet door de router, maar rechtstreeks (zonder include, en dus zonder code die in de router eventueel erboven zou staan, voor het include statement)
Een error 404 geven is dan eigenlijk liegen, doorsturen naar de router en zo een omweg maken lijkt me ook raar.
Bij de methods staat "all" inderdaad voor POST, GET, maar ook voor PUSH of PULL.
Maar ik had verwacht dat mijn code eigenlijk een rommeltje was?

De Request class stelt eigenlijk niks voor. Ik zou niet weten wat ik er mee moet.
Ja, je code is een rommeltje. Maar als ik heel eerlijk ben had ik geen zin om weer met een nieuw persoon het process van een framework te doorlopen... Het zelf maken van een framework heb ik nog nooit begrepen, je komt dan alleen maar met meer vragen te zitten. Het gebruiken van een bekent framework zorgt ervoor dat je al 1001 voorbeelden en best-practises op het internet kunt vinden, daardoor leer je het een stuk gemakkelijker.

Maar ja, omdat je het anders zielig is dat je het verkeerde aanleerd :)
- Routes zijn ook objecten, een Route object dus.
- Het matchen van een URL zou je moeten overlaten aan het Route object, dat is degene die weet wat er in het Route object staat, de Router mag daar niks van weten. Als je het heel strict bekijkt ga je nog een stap verder en zeg je dat je niet wilt beperken op URLs, dan maak je nog een UrlMatcher klasse die het matchen regelt.
- Kijk eens naar php namespaces en autoloading
- De router is alleen voor het vinden van een route, het bepalen wat de not found route is en het bepalen wat de destination is is niet het doel van de Router.
- niet elke variabele die je in je klasse gebruikt is een property van die klasse. Slechts een paar zijn er een property.
- "$this->_destination = "welcome.php"; // Startpagina, normaal index.php" bepaal niks in de klasse zelf. Als je nu welcome.php aanpast moet je je klasse aanpassen, en klassen aanpassen voor zulke dingen is verboden. Je startpagina is gewoon een route zoals elke andere.
- Je gebruikt een hele vreemde manier wat betreft het laden van een controller. Wat doe je precies in een controller, ik heb niet het idee dat je daar iets van begrepen hebt (sorry).
- Je Request klasse is erg gelimiteerd. Het is nu gebonden aan: Het gebruik van superglobals. (gebruik nooit superglobals in een klasse!) Tevens is getArgument nu gebonden aan het gebruik van $_GET. Ik zou altijd werken met $_SERVER['PATH_INFO']
Ik heb inderdaad toch maar naar wat frameworks gekeken. (op github kun je de hele codes doorspitten)
Wat ik eigenlijk wel begrijp, maar niet het voordeel van inzie is het volgende:
Een simpele doorsnee route ziet er zo uit: /controller/action/paramaters
Het is dan de bedoeling dat de gevraagde controller wordt aangeroepen, en dat een methode van die controller wordt aangeroepen, die ook in de route staat.
controller/action/parameters =
album/bekijk_foto/1042 =
AlbumController/view/1042 zegt eigenlijk:

$AlbumController->view(1042);

- Wat als je meerdere controllers nodig hebt?
- Wat als je meerdere parameters hebt?

- Hoe doet mod_rewrite de GET variabelen normaal doorgeven? Daarmee bedoel ik: ?action=activate&user=123
Die zou kunnen worden herschreven naar /activate/123 of niet?
De namen van de parameters zijn weg! Hoe doe ik nou in mij PHP aangeven welke parameter ik wil? ($_GET['action'] kan toch niet meer? naam is weg)

Reageren