Categorías
Php

Guiones medios en URL controlador Codeigniter

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»

Deja un comentario

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