Hay que tener en cuenta que no hay una relación 1 a 1 entre url amigable, y página a mostrar.
Por otro lado, hay que saber de qué naturaleza es cada parte de un link.Hay elementos que son importantes para encontrar qué controlador se debe usar (lo que llamo propiamente "enrutado", parámetros para ese controlador (ids,etc) que pueden existir en varias partes de la url, y trozos de la url que cumplen simplemente una función de SEO.
Por ejemplo, sobre el asunto de los slugs:
- un link del tipo
http://...../articulos/285-articulo-sobre-enrutamiento , el slug cumple una función de SEO, no de enrutado.Ni siquiera el id, en este caso 285, tiene una función de enrutado (el controlador es "articulo", y 285 es un parámetro para ese controlador).
Si mirais la barra de direcciones de vuestro navegador ahora mismo, veréis un link con un slug que no tiene ninguna función de enrutamiento.Esto ocurre especialmente cuando asegurar que un slug va a ser único, es complicado.En cualquier caso, si vemos la url de este thread en fdw, vemos que el slug no está aportando nada en términos de "friendliness" de la url.No la hace más amigable (de hecho, la hace más compleja).Es una función pura de SEO.
- Parametrización: una url del tipo
http://...../articulos/libros/aventura muy posiblemente no exista en el enrutador.En el enrutador existe algo del tipo "/articulos/([^/]*)/([^/]*)". Parte de la ruta son parámetros para un mismo "controlador".Es decir, los parámetros del controlador no sólo se obtienen por $_GET.
No sólo esto.En algunas webs, los parámetros no están siquiera en el path de la request, sino en el subdominio de la url : ej,
http://libros.mitienda.com/aventura
- Varios lenguajes: la url anterior, en un sitio que tiene una versión inglesa, debería ser
http://..../articles/books/adventure.Esto supone 2 problemas.Primero, que en tu código, cuando quieres crear un link a esa página, no puedes presuponer un lenguaje u otro.No puedes escribir <a href="http://.../articulos/libros/aventura">...</a>. Segundo, que tu router tiene que conocer las rutas en cualquier idioma.
Esto también muestra que el enrutado, y la creación de links, van unidos.Un router completo debería tener metodos / clases que generaran links.
Un caso interesante en el que he trabajado, tenía estrategias de links distintas según el idioma.En castellano, existía el equivalente a
http://www.mitienda.com/libros/aventura , pero en inglés, lo que exista era
http://books.mystore.com/adventure.
Hay algunas cosas más, pero en lo que quería aportar era en esto último: los enrutadores deben ser capaces no sólo de interpretar rutas, sino también de generarlas.Y, si es posible, usando el mismo set de reglas.