URLs amigables en CodeIgniter: Controlador ‘catch-all’

Supongamos que estamos programando un CMS en CodeIgniter para integrarlo en nuestros proyectos, y queremos generar urls del estilo www.dominio.com/titulo-de-la-pagina. Una manera de enfocarlo sería por ejemplo crear un controlador Paginas con un método cargar, al que se le pasará como parámetro el título de la página en cuestión. De esta manera se llamaría a la url www.dominio.com/paginas/cargar/titulo-de-la-pagina. Para eliminar /paginas/cargar/ de la url editaríamos el fichero routing.php.

Esto supone un problema: si añadimos una regla genérica a las rutas para redirigir cualquier url al controlador paginas/cargar, no funcionaría el resto de controladores de nuestra aplicación. Deberíamos añadir una regla para cada página o bien para cada controlador que tengamos, con lo cual perdemos dinamismo y nos obliga a editar el fichero de rutas con cada cambio.

Extendiendo la librería Router

Lo que nos interesa es un controlador ‘catch-all’, que capture cualquier texto de la url y lo procese siempre que no exista otro controlador con ese nombre. Para ello vamos a extender la librería de rutas creando un archivo MY_Router.php y guardándolo en application/libraries/. El método estándar para extender librerías es crear un archivo con el mismo nombre añadiendo el prefijo MY_. Aquí tenéis el código de MY_Router.php:

<?php
class MY_Router extends CI_Router {
 
    function MY_Router()
    {
        parent::CI_Router();
    }
 
    function _validate_request($segments)
    {
        // Comprueba que el controlador no existe
        if (!file_exists(APPPATH.'controllers/'.$segments[0].EXT))
        {
            $segments = array("paginas", "cargar", $segments[0]);
 
        }
        return parent::_validate_request($segments);
    }
}
?>

Como veis lo que hacemos es extender el método _validate_request de la librería Router, que es el que procesa los segmentos de nuestra url. En él comprobamos si el nombre del primer segmento de la url corresponde a un controlador existente, si no es así añadimos al array de segmentos nuestro controlador y método paginas y cargar y llamamos al método _validate_request de la librería Router original pasándole estos parámetros.

Finalmente nos queda crear el controlador Paginas.php:

<?php
class Paginas extends Controller {
    function __construct(){
        	parent::Controller();
    }
 
    function cargar($title){
    	.....
    }
}
?>

Dentro de la función cargar, $title contendrá el título de nuestra url, es decir el primer segmento que le pasamos: www.dominio.com/titulo-de-la-pagina. En dicha función lo gestionaremos como nos interese, siendo lo más lógico utilizar ese título como identificador de nuestra página y buscarla en la base de datos para mostrarla.

73 comentarios para “URLs amigables en CodeIgniter: Controlador ‘catch-all’”

  1. klik disini dice:

    klik disini

    URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web

  2. merpatislot88

    URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web

  3. onebetasia dice:

    onebetasia

    URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web

  4. Mildcasino E-Sport

    URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web

  5. affordable motorcycle helmets

    blog topic

  6. flat line laser pointer

    blog topic

  7. Aplikasi Trading Emas

    blog topic

  8. waar koop je laserpen een echte

    blog topic

  9. au88 dice:

    au88

    URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web

  10. Vogue Photobooth LED Enclosure rental Lynwood

    blog topic

  11. LK21 dice:

    LK21

    URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web

  12. lk21 japan dice:

    lk21 japan

    URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web

  13. black car service laguardia

    blog topic

  14. laserosoitin aaa patteri kissa

    blog topic

  15. Paito SGP dice:

    Paito SGP

    URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web

  16. web page dice:

    web page

    blog topic

  17. metoprololo dice:

    metoprololo

    metoprololo

  18. tyra tadalafil

    tyra tadalafil

  19. vidalista 10 mg opinioni

    vidalista 10 mg opinioni

  20. live draw sdy

    URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web

  21. flim bokep amerika

    URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web

  22. dutasteride mtf

    dutasteride mtf

  23. finpecia 1mg uses

    finpecia 1mg uses

Deja un comentario

Time limit is exhausted. Please reload the CAPTCHA.

RSS iTunes podcast Twitter

Categorías

Enlaces

Archivos