Simple routeador para PHP

Publicado en Snippets · 23 abril 2016.

Esta semana he añadido un nuevo routeador a Trasweb Framework ( framework PHP personal que pronto liberaré ). Nunca me ha hecho falta porque ya tiene un parseo de url predeterminado y que funciona bastante bien. Sin embargo, quería hacer algo más avanzado para simplificar el proyecto con el que estoy, así como tenerlo listo para el futuro para cuando libere el framework o si me surge la necesidad de algo más avanzado en el futuro. Es muy tonto(ya que como digo tampoco es que necesite de mucho más), pero potente. Trataré de exponerlo aquí bajo un PHP muy modificado para evitar la dependencia de mi framework para todos aquellos que lo necesiten y no quieran usar Trasweb Framework. Ni que decir tiene que en el framework funciona mucho mejor :). Como véis es una clase muy simple. Si suponemos que estamos bajo: "https://www.example.com/destacados/editar/imagenes/generales/6". Podríamos usarla como:

<?php 
 
 $route 
= new Route();
 
$route->fromPattern('/destacados/:accion/imagenes/generales/:id'); //[ 'accion':editar, 'id': 6 ]
 

En el anterior código lo que hemos hecho es que ciertas partes de la url estén parametrizadas. En caso de encajar esta url con la actual, devolverá los parámetros asociados. Un parámetro, como se ve, no es más que una cadena prefijada con dos puntos(:).

<?php 
 
 $route 
= new Route();
 
$route->fromPattern('/destacados/:accion/imagenes/generales[/:id]', ['id' => 0]); //[ 'accion':editar, 'id': 6 ]
 

En el anterior código hemos añadido para que el último parámetro sea opcional. De manera que la url también encajara con este molde aunque no lleve id. Hemos añadido un valor por defecto( segundo argumento del método ) al id para el caso en que no lleve id obtenga el valor 0.

<?php 
 
 $route 
= new Route();
 
$route->fromPattern('/destacados/:accion/~/:id'); //[ 'accion':editar, 'id': 6 ]
 

En el anterior código hemos añadido un parámetro indeterminado mediante ~. Esto quiere decir que la url encajara también con nuestro molde aunque no sepamos bien lo que haya entre medio.

Ahora otra tanda de ejemplo suponiendo que la url actual es: "https://www.example.com/destacados/editar/imagenes/generales/2016/04/20"

<?php 
 
 $route 
= new Route();
 
$route->fromPattern('/destacados/~/:dia'); //[ 'dia': 20 ]
 

En el ejemplo anterior cogemos el último valor de la url. Que en este caso es el día 20.

<?php 
 
 $route 
= new Route();
 
$route->fromPattern('/destacados/~/i:dia'); //[ 'dia': 20 ]
 

El ejemplo anterior es muy parecido a su predecesor, pero nos aseguramos que para que encaje nuestro patrón con la url tiene que ser de tipo numérico el último parámetro.

<?php 
 
 $route 
= new Route();
 
$route->fromPattern('/destacados/~/i:mes/i:dia'); //[ 'dia': 20, 'mes': 04 ]
 
$route->fromPattern('/destacados/~/i:anio/i:mes/i:dia'); //[ 'dia': 20,'mes': 04, 'anio': 2016 ]
 

En este, obtenemos también el mes y el año, junto con el día, asegurándonos que son enteros.

Ahora el último para rizar el rizo:

<?php 
 
 $route 
= new Route();
 
$route->fromPattern('/destacados/~/[i:anio][/i:mes][/i:dia]');
 

Si url actual es:
 * /destacados/editar/imagenes/generales/2016/04/20
 > [ 'dia': 20,'mes': 04, 'anio': 2016 ]

* /destacados/editar/imagenes/generales/2016/04
> ['mes': 04, 'anio': 2016 ]

* /destacados/editar/imagenes/generales/2016
> [ 'anio': 2016 ]

Respecto al uso de callback y demás, os dejo a vosotros probarlo y que lo comentéis. Como veis es muy simple pero potente ( como Trasweb Framework ). Hay otros routeadores que permiten mucho más cosas, sin embargo, se los dejo a quien quiere hacer webs complicándose la vida( bueno, para eso ya están los que gustan de Symfony ).

Como digo esto en Trasweb Framework es bastante diferente. Igual de simple, pero mucho más potente. ¿ A qué ya tienes ganas de probarlo ?.

¡ 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.