Expresiones regulares y uso del enrutador routes.php de CakePHP

Expresiones regulares y uso del enrutador routes.php de CakePHP

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,usodelenrutador,ruteo url en php,routes cakephp,regular expression para solo numeros mvc,manejo de urls en cakephp,expresiones regulares slug,enrutamiento php,archivo route cakephp,aplicacion web mvc expresiones regulares,validar parametros en url con php route

Noticias relacionadas »

1 comentario en “Expresiones regulares y uso del enrutador routes.php de CakePHP

  1. Pingback: Ejemplos de rutas con expresiones regulares – Trifulcas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Invertir en criptomonedas: »

 

Cómo comprar bitcoin

Invertir y comprar Bitcoin y otras altcoins es más fácil de lo que crees.

1) Si sólo quieres comprar Bitcoin, Ethereum o Litecoin como inversión, tu opción es Coinbase

2) Si quieres probar con otras criptomonedas tu opción es Binance

3) Cualquier duda escríbeme con total libertad al formulario de contacto para resolver dudas: https://www.pedroventura.com/contacto/

¡Comparte este artículo! »

  • Zein (2 días)
    EXELENTEE!!! MIL PUNTOS PARA TI! si me funcionó a la…
  • señales cryptowhale (3 días)
    https://t.me/SignalsWins
  • carlos hernandez (1 semana)
    Hola, hay alguna funcion k sirva para saber el correo…
  • steven (3 semanas)
    tengo un problema me sale este error cuando pongo data:…
  • lewis rod (4 semanas)
    https://t.me/joinchat/Hs_yUFG_xDVJ-PS3cWEYAw este es el enlace me equivoque.
  • lewis rod (4 semanas)
    https://t.me/joinchat/Hs_yUBDhw2Uk7D3D835GJQ grupo de telegram latino sudamericano peru, colombia, ecuador, chile,…

Suscríbete al newsletter »

Proporciona tu correo electrónico a continuación y recibe las últimas noticias! Funciona con Feedburner de Google

Archivo »

Leer entrada anterior
página error 404 en wordpress

Presentar una página para todas aquellas búsquedas o urls inexistentes en el blog o en cualquier site es fundamental. Es...

Cerrar