Sando schreef op vrijdag 27 oktober 2023 @ 13:28:
Bedankt voor de uitleg, interessant om te lezen.
Wikipedia gebruikt meen ik ook Symfony, dus ik ging daar ook even kijken. Daar werkt een route met dubbele slash wel:
en.wikipedia.org/wiki//e/_(operating_system)
Misschien is de Symfony router slimmer dan je denkt, en komt het goed als je de slashes gewoon laat staan zonder encodering?
Slashes kunnen ook wel werken, als je het zo doet:
PHP:
1
2
3
4
| class DefaultController extends AbstractController
{
#[Route('/tag/{slug}', requirements: ['slug' => '.+'])]
... |
.+ betekend hier in reguliere expressie: elk teken, tenminste 1 teken lang.
Alleen is er bij Tweakers niet alleen de pagina
/tag/e-os/, maar ook andere pagina's zoals
/tag/e-os/nieuws/.
Daarom matchen wij niet op
.+, maar op
[^/]+ (reguliere expressie voor elk teken zolang het maar geen slash is, tenminste 1 teken lang). Op die manier kunnen we ook subpagina's (en evt nog een nesting dieper) matchen. Dat zou werken, als Symfony niet %2F vertaald naar een slash voordat de reguliere expressie wordt uitgevoerd.
Als een tag altijd als laatste kwam hadden we ook
.+ kunnen gebruiken, maar omdat de tag er tussen inzit wordt dat lastiger.