Simple routeador inverso

Publicado en Snippets · 30 abril 2016.

Si la semana pasada mostré un routeador simple para PHP, hoy toca el routeador inverso. La diferencia está en que el routeador extrae unos parámetros desde una url( y en algunos casos ejecuta un callback o redirige a un controlador ) y el routeador inverso, lo contrario: forma una url desde unos parámetros. Esta semana en vez de clase, y por simplificar, lo haré con una función. Como se puede ver, además de mal tabulado( ya que he commiteado copiando y pegando en bibucket ), la función se basa en sólo dos elementos. Las variables( cadenas de textos prefijadas con dos puntos, : ) y los corchetes( para elementos opcionales. Estos últimos, funcionan de la siguiente manera: * Si el corchete contiene una variables directamente dentro( no perteneciente a otro corchete anidado ) y no tiene valor asociado, el contenido del corchete es igual a cadena vacía. * En caso de no cumplirse lo anterior, se devolverá el contenido del corchete.

Pasemos a los ejemplos:

<?php 
 
 
echo reverse_routing('/blog[/:slug[-:id].html]', ['slug' =>'simple-routeador-inverso''id'=> 32 ]); // print /blog/simple-routeador-inverso-32.html
 
echo reverse_routing('/blog[/:slug[-:id].html]', ['slug' =>'simple-routeador-inverso' ]); // print /blog/simple-routeador-inverso.html
 
echo reverse_routing('/blog[/:slug[-:id].html]'); // print /blog
 

Como se puede ver, los parámetros se substituyen en el caso de que existan. Si no existen y estaba dentro de un corchete, el resultado del corchete es vacío.

<?php 
 
 
echo reverse_routing(''/blog/:anio/:mes/:dia/:slug-:id.html]', ['anio' => 2016, 'mes' => 4, 'dia' => 30, 'slug' =>'simple-routeador-inverso', 'id'=> 32 ]); // print /blog/2016/06/30/simple-routeador-inverso-32.html
 

En Trasweb Framework existe también la opción de un corchete restrictivo(:[], corchete con dos puntos antes ), aunque no está añadido en este código. Es como el corchete normal, es decir, si hubo una variable dentro sin valor, su contenido entero sigue siendo vacío. Sin embargo, ejerce esa misma restrinción sobre el corchete superior( si lo hay ). Tomando como ejemplo uno de los rimeros, pero con corchete restrictivo:

<?php 
 
 
echo reverse_routing(''/blog[/:slug:[-:id].html]', ['slug' =>'simple-routeador-inverso' ]); // print /blog
 

No creo que sea necesario comentar más. Como se puede ver es muy sencillo pero, como su mellizo, muy potente.

¡ Compártelo !
Este sitio utiliza cookies propias y de terceros para mejorar tu experiencia con el sitio web. Al continuar con la navegación consideramos que acepta su uso.