Una de las características que me encanta de CodeIgniter es el uso de url’s amigables. A pesar de que la configuración por defecto deje un «index.php» en la ruta. Esto es fácil de modificar para obviar esta parte por medio de una configuración del archivo «.htaccess». Hay que tener en cuenta que CodeIgniter usa el patrón MVC y que las url’s apuntan a los controladores en principio. Sin embargo, cada ruta debe ser registrada a nivel de variable en el archivo routes.php que se encuentra en la carpeta config. Analizando los detalles de esta herramienta me he encontrado que hay una alternativa al enrutamiento en CodeIgniter y no es necesario registrar todas las url.
Opción por defecto en routes.php
En la documentación encontramos que por cada función de cada controlador hay un registro. Este enrutamiento en CodeIgniter tiene una ventaja y es en cuanto a personalización y seguridad. Por ejemplo, si tengo un controlador de noticias y las funciones de buscar, editar, crear y resumen en routes.php se pone lo siguiente:
$route[‘noticias’] = ‘noticias’;
$route[‘noticias/crear’] = ‘noticias/crear’;
$route[‘noticias/editar/(:any)’] = ‘noticias/editar/$1’;
$route[‘noticias/(:any)’] = ‘noticias/detalle/$1’;
En la variable va como se recibe la url en el navegador y a la derecha cómo se debe leer en el controlador. La variable «$1» es un comodín y sirve para indicar el posible identificador único o ID. Hay múltiples opciones para registrar la ruta donde la más destacada es el uso de expresiones regulares. En mi caso no he revisado en detalle el uso de estas ya que incluí una a una todas las rutas. El problema se presenta para cuando el sistema crece hay que incluir manualmente cada ruta, siendo algo improductivo.
Enrutamiento en CodeIgniter alternativo: El uso de la función _remap
Cuando un software está diseñado para instalar frecuentemente controladores la opción por defecto es un problema para automatizar este proceso. Buscando una alterativa para el enrutamiento en CodeIgniter resulta que hay una función llamada _remap. No estoy seguro si es propia de php o de CodeIgniter pero ayuda a resolver este inconveniente. En la configuración de rutas se requiere un controlador por defecto. En este podremos poner a funcionar el remap y se llamará antes que cualquier cosa. Entonces podremos redireccionar como queramos la url recibida así:
public function _remap($method, $params = array())
{
$method = strtolower(‘process_’.$method);
if (method_exists($this, $method))
{
return call_user_func_array(array($this, $method), $params);
}
(empty($this->uri->segment(2))) ? $this->index() : show_404();
}
Técnicamente se puede interpretar en que busca en las funciones del controlador la url enviada. El método es la primera variable y el resto serían parámetros. Luego busca si coincide con un método existente y lo redirecciona enviándole los parámetros. También hay que tener en cuenta que cuando la función es index se comporta diferente. En este caso la url puede que tenga menos variables entonces si viene vacía va directo al index. Por otro lado si no coincide nada lo mandamos a una página 404 que es un error de url no existente.
Cualquier inquietud puedes contactarme y yo estaré dispuesto a responder ¡Feliz Día!

