Necesitaba que los nombres de mis controladores utilizaran el guión medio como nombres para URL amigable a buscadores en Codeigniter. Este sólo proporciona nombre de métodos o controladores con guión bajo, y buscando por Internet no encontré ningún método ni solución eficaz.
Mi solución ha sido extender la librería Routes en Codeigniter.
Creamos un nuevo archivo llamado MY_Router.php y lo guardamos en la carpeta libraries de nuestra aplicación y dentro copiamos el siguiente código:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class MY_Router extends CI_Router { function MY_Router(){ parent::CI_Router(); } function _validate_request($segments){ //Permitir - en nombre function $segments = str_replace('-','_',$segments); // Does the requested controller exist in the root folder? if (file_exists(APPPATH.'controllers/'.$segments[0].EXT)) { return $segments; } // Is the controller in a sub-folder? if (is_dir(APPPATH.'controllers/'.$segments[0])) { // Set the directory and remove it from the segment array $this->set_directory($segments[0]); $segments = array_slice($segments, 1); if (count($segments) > 0) { // Does the requested controller exist in the sub-folder? if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].EXT)) { show_404($this->fetch_directory().$segments[0]); } } else { $this->set_class($this->default_controller); $this->set_method('index'); // Does the default controller exist in the sub-folder? if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT)) { $this->directory = ''; return array(); } } return $segments; } // Can't find the requested controller... show_404($segments[0]); } }
Lo único realmente que se ha implementado es el srt_replace() de Php cambiando los guiones medios por los bajos para que Codeigniter trabaje como hasta ahora lo hace.
function _validate_request($segments){ //Permitir - en nombre function $segments = str_replace('-','_',$segments); // Does the requested controller exist in the root folder? if (file_exists(APPPATH.'controllers/'.$segments[0].EXT))
:)
2 respuestas a «Guiones medios en URL controlador Codeigniter»
Gracias por el aporte… pero es que soy novato y no se como aplicar la clase ¿desde donde llamo a la libreria; desde mi Controller?
como aplico su metodo en los metodos de mi controller…. dame un ejemplo porfa.
O solo tengo que hacer lo que dicho en el tuto… porque asi no me funciona mis url siguen con guion bajo.
Simplemente crea un archivo .php. Llámalo MY_Router.php y lo guardamos en la carpeta libraries de tu carpeta application (o como la hayas llamado).
Ahora cuando crees un enlace lo puedes hacer así:
«www.ejemplo.com/controlador/mi-metodo» en vez de «www.ejemplo.com/controlador/mi_metodo»