Jose Rico, indie game developer

Blog de José Rico, diseño web, diseño gráfico, Onil (Alicante)

Hola, en este blog encontrarás apuntes, bocetos y demás trabajos inconclusos.

Guiones medios en URL controlador Codeigniter

Escrita el 17/01/11 14:44 por José Rico

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))

:)

Posteado en Php | 2 comentarios »

2 comentarios

  1. sergio comentó el

    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.

  2. José Rico comentó el

    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

Nota: La moderación de comentarios está activada y los administradores debemos validar tu post. No reenvíes el comentario

MIS PROYECTOS

  • Crea tu dado virtual online con Roll the Dice Online
  • Vinyl Toys DIY Gas Collection
  • Game Jobs, videogames jobs offers

Búscador

Categorías

Archivos

Blogroll

Últimos posts

Hablando sobre

Meta:

  • Code, diseño web y videojuegos
  • Vinyl Escape DIY Toys