A lo largo del Manual de CodeIgniter, estas funciones de enrutado ya las hemos estado utilizando de manera intensiva y estaban explicadas en el artículo URLs en CodeIgniter. En el presente texto vamos a explicar cómo podemos sobreescribir ese enrutado predeterminado, creando URLs mucho más personalizadas, a las que asignamos diferentes recursos para su ejecución.
De manera predeterminada, el enrutado de CodeIgniter hace que el primer elemento después del nombre del dominio sea la clase o controlador que tiene que gestionarlo. El segundo elemento de la URL sería el método dentro de ese controlador y el tercero, y siguientes, serían los parámetros enviados al método que ejecutaría esa ruta. Eso se puede ver en el siguiente esquema de URL:
http://midominio.com/controlador/metodo/parametro
Pero este modelo de trabajo, que puede ser óptimo para la mayoría de los casos, puede que no lo sea tanto para muchos otros. Afortunadamente, los desarrolladores de aplicaciones de CodeIgniter disponen de unos mecanismos para sobreescribir esas rutas predeterminadas y hacelas que se adapten a sus necesidades, para crear rutas diferentes, como podrían ser:
http://midominio.com/productos/21/
http://midominio.com/productos/13/
http://midominio.com/productos/9/
De manera predeterminada el segundo segmento de la URL correspondería con el nombre del método que ejecutaría la página, pero en esos ejemplos, como se puede ver, estaríamos pasando el identificador de un producto, que probablemente nos gustaría que se enviara como parámetro a un método de controlador.
system/application/config/routes.php
Allí podremos definir un array llamado $route donde colocaremos todas las reglas de enrutado que queremos crear de manera específica en nuestra aplicación web CodeIgniter.
Si abrimos el mencionado archivo podremos ver que ya hay dos valores de enrutado definidos en el array $route.
$route['default_controller'] = "welcome";
$route['scaffolding_trigger'] = "";
Esos dos valores de enrutamiento son propios de CodeIgniter y están reservados para cualquier otro uso. Nosotros podemos cambiar los valores predeterminados de enrutamiento para esas variables, pero no podemos crear rutas de nuestra aplicación utilizándolos. Además estas dos rutas predeterminadas deben aparecer antes de cualquier otra ruta que definamos posteriormente en el archivo routes.php.
Entonces, para crear nuestras propias reglas, se trataría simplemente de asignar nuevos valores al array asociativo $route y para ello tenemos que atender a la siguiente sintaxis:
$route['de_donde_vienes'] = 'a_donde_vas';
Como se puede ver, en las rutas tenemos dos partes:
$route['desarrolloweb'] = "empresa/tecnologia/5";
Esto quiere decir que, si CodeIgniter se encuentra "desarrolloweb" en el primer segmento de la URL (después del nombre del dominio), se redireccionará el flujo de la aplicación para el controlador "empresa", el método "tecnologia" y pasándole como parámetro el dígito 5.
Claro que estas rutas se podrán definir por medio de patrones, de varias maneras, para hacerlas más potentes. Para ello, dichos patrones de enrutamiento, que sirven para definir las rutas 'de_donde_vienes', pueden incluir comodines o expresiones regulares.
(:num)
Este comodín sirve para cualquier cadena que contenga solamente dígitos numéricos.
(:any)
Este comodín sirve para cualquier cadena, con cualquier carácter.
Para ver cómo utilizar estos comodines en la generación de reglas de enrutamiento, podemos observar el siguiente ejemplo:
$route['producto/(:any)'] = "productos/busqueda";
En este ejemplo, una URL que tenga la palabra producto en el primer segmento y en el segundo segmento cualquier conjunto de caracteres, se enrutará por el controlador productos y el método búsqueda.
$route['cliente/(:num)'] = "empresa/muestra_cliente/$1";
En este segundo ejemplo, si el sistema de enrutado de CodeIgniter detecta que en el primer segmento de la URL está la palabra "cliente" y en el segundo segmento hay un número, la aplicación enrutaría esta llamada a través del controlador "empresa" y el método "cliente". Además, pasaría ese número, del segundo segmento de la URL de origen, como parámetro al método muestra_cliente.
$route['manuales/([0-9]+)'] = "manuales/muestra/$1";
Si detectamos en la primera parte la palabra manuales y en el segundo segmento un conjunto de dígitos numéricos, se enrutaría a través del controlador manuales, el método muestra, con el parámetro indicado como dígitos numéricos.
$route['espana/([a-z_-]+)/([a-z_-]+)'] = "localidad/$1/$2";
Esta regla de enrutamiento, un poco más compleja, serviría para detectar la palabra "espana" en el primer segmento y luego dos segmentos adicionales, con sendas expresiones regulares que aceptarían letras de la "a" a la "z" con el guión bajo o medio, repetidas una o más veces. Las enrutaría a través del controlador "localidad" y luego, el método especificado en la primera expresión y el parámetro indicado en la segunda expresión regular.
![]() beni088... | Nuevos artículos ya, por favor!! | 14/11/2011 |