Publicidad
Expresiones regulares y uso del enrutador routes.php de CakePHP

Publicado por: Pedro Ventura
- 26 octubre, 2010
- 0 comentario/s
- CakePHP Tags: expresiones regulares, tutoriales
Después de algo mas de un año trabajando con CakePHP todavía estoy aprendiendo y mejorando una de las “piedras angulares” del framework CakePHP y es a usar y manejar el enrutador, el archivo routes.php
El framework MVC de CakePHP es fantástico para el desarrollo de aplicaciones y webs con cierta soltura y rapidez y es uno de sus puntos fuertes, pero y el SEO? las urls amigables en CakePHP son algo ortopédicas y poco “naturales” a no ser que utilicemos el routes.php porque al Sr. Google no se gusta nada una url que diga : mi_proyecto.com/articulos/post/1 . Esta es la estructura que propone cakephp para el desarrollo “ágil” de aplicaciones, un controlador llamado articulos_controller.php una acción o función llamada function post() y el identificador del post 1. Bien, pero esto no es amigable ni mucho menos RELEVANTE para Google y es aquí cuando surge routes.php para solventar la carencia de crear urls relevantes y útiles a nivel SEO.
Pero como he indicado en la primera frase de mi artículo, llevo mas de un año usando cakephp y routes.php y cada día descubro algo nuevo y voy optimizando el código más y más. Para usar routes.php se necesita un buen conocimiento de expresiones regulares, pues son la manera en la que optimizaremos nuestro routes.php y crearemos patrones para enrutar y dirigir grupos de urls a determinados controladores y acciones.
La conclusión de este post la voy a indicar antes de terminarlo, y es que para poder tener una buena aplicación con urls amigables hay que usar routes.php pero para esto EXPRESIONES REGULARES. Esta es la clave, controlar las expresiones regulares y saberlas hacer de tal manera que puedas enrutar cualquier url a donde quieras.
Una excelente página que me ha ayudado mucho para todo el tema de expresiones regulares es esta http://www.regular-expressions.info/tutorial.html
En este artículo pondré algunas de las expresiones regulares en php que uso y manejo en el enrutador routes.php de CakePHP. Son a modo de ejemplo pero pueden servir a modo de guía y tutorial.
Algo simple, expresión regular para todo lo que contenga letras. De modo que en mi parámetro slug solo pueda contener repeticiones de letras.
Router::connect('/s', array('controller'=>'buscador', 'action'=>'index'),array('pass' => array('id', 'slug'),'id' => '[a-z]+'));
Expresión regular para números. El parámetro page contendrá una repetición de números
Router::connect('/articulos/:page',
array('controller'=>'articulos','action'=>'index'),
array('pass'=>array('page'),'page'=>'[0-9]+'));
* Los corchetes combinado con el guión en expresiones regulares se usan para agrupar un rango de valores [0-9]
Se pueden crear expresiones regulares con número mucho mas complejas
1[0-9][0-9] /con esto tendremos un valor entre 100 y 199 2[0-4][0-9] /tendremos un valor entre 200 y 249 [0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5] // 123 ó 12345 esta tiene 2 soluciones ^[0-4]?[0-9]$ // usando anchors de expresiones regulares se consigue crear mas complejidad. Solucion: 0 ó 00..49
Expresión regular para parametrizar una url con letras y números, de manera que las letras son fijas pero los números pueden variar
Router::connect('/recetas/:tiempo',
array('controller' => 'recetas', 'action' => 'filtrado'),
array('pass'=>array('tiempo'),'tiempo'=>'de-[0-9]+-a-[0-9]+-minutos'));
Expresión regular para validar algo con números, letras, guiones y guiones bajos. En este caso el parámetro slug le permito que pueda contener cualquiera de los caracteres indicados.
Router::connect('/preguntas/:slug-:id',
array('controller'=>'preguntas', 'action'=>'ver'),
array('pass' => array('id','slug'),'id' => '[0-9]+','slug' => '[0-9a-z-_]+'));
Expresión regular para obtener un resultado de un grupo de opciones
Router::connect('/canciones/:idioma', array('controller'=>'canciones', 'action'=>'buscar'),
array('pass'=>array('idioma'),'idioma'=>'(?:espanol|portugues|ingles|frances)?'));
La agrupación en expresiones regulares se realiza mediante paréntesis () y para generar un rango de opciones se usa el pipe |
Es muy importante poner ?: al inicio del paréntesis y ? al final de este para que no nos devuelva en el array de salida $this->params una variable más con el resultado obtenido de la expresión regular. Pero si se quiere también se puede poner la agrupación así
(espanol|catalan|vasco|gallego|portugues|ingles|frances)
Expresión regular para valores opcionales.
Nov(iembre)? devolverá Nov y Noviembre
Se puede incluir los valores opcionales que quieras agrupándolos con paréntesis () y colocando la interrogación ? al final del cierre de paréntesis
Expresión regular para repeticiones
Router::connect('/articulos/:page',
array('controller'=>'articulos','action'=>'index'),
array('pass'=>array('page'),'page'=>'[0-9]+'));
[0-9]+ Repetirá los caracteres previos una o más veces
[0-9]* Repetirá los caracteres previos cero o más veces
[0-9]{n} Repetirá el ultimo carácter n veces.
[0-9]{n,m} Repetirá el ultimo carácter entre n y m veces.
Expresión regular con anchor *.
El * es un patrón que valida la repetición de cero y más caracteres.
En este caso le estoy pasando al una variable adicional a la funcion index() del controller fotos que es redireccionar. Esta tiene un valor que yo le asigno y después podré utilizarla para mi lógica.
Router::connect('/fotos/imagenes_viejas/(.*)',
array('controller'=>'fotos', 'action'=>'index','redireccionar'=>'1'));
Algunos anchors fundamentales en expresiones regulares:
^
Indica el inicio del patrón de una expresión regular.
$
Indica el final del patrón de una expresión regular
|
El pipe. Hace que el motor de expresiones regulares pueda validar cualquiera de la parte en el lado izquierdo, o la parte en el lado derecho. Puede usarse en una serie de opciones.
?
Hace que el ítem anterior sea opcional.
Éstos son algunos ejemplos de expresiones regulares que he usado en el routes.php pero se pueden hacer mucho más complejos y usarlo para infinidad de casos y patrones.
Seguiré actualizando este post a medida que vaya desarrollando patrones de expresiones regulares interesantes en el routes.php.
Tags de búsquedas:
imagenes regulares,que son las imagenes regulares,anchor expresiones regulares,aplicacion web mvc expresiones regulares,php crear grupos en expresiones regulares,regular expression para solo numeros mvc
Sigue leyendo, no te pierdas los siguientes artículos
Publicidad
0 comentario/s

