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.



klik disini
URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web
merpatislot88
URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web
onebetasia
URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web
Mildcasino E-Sport
URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web
affordable motorcycle helmets
blog topic
flat line laser pointer
blog topic
Aplikasi Trading Emas
blog topic
waar koop je laserpen een echte
blog topic
au88
URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web
Vogue Photobooth LED Enclosure rental Lynwood
blog topic
LK21
URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web
lk21 japan
URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web
black car service laguardia
blog topic
laserosoitin aaa patteri kissa
blog topic
Paito SGP
URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web
web page
blog topic
metoprololo
metoprololo
tyra tadalafil
tyra tadalafil
vidalista 10 mg opinioni
vidalista 10 mg opinioni
live draw sdy
URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web
flim bokep amerika
URLs amigables en CodeIgniter: Controlador ‘catch-all’ « David Rojas – Diseño y desarrollo web
dutasteride mtf
dutasteride mtf
finpecia 1mg uses
finpecia 1mg uses