Configurar Codeigniter
¿Cómo configurar el Framework la primera vez que nos disponemos a usarlo? No es algo excesivamente complicado, pero hay algunos detalles que conviene saber de antemano antes de ponerse a trabajar con él. Vamos a verlos.
Una vez hemos bajado los archivos de Codeigniter (http://codeigniter.com/download.php) y los hemos descomprimido en nuestro directorio raiz correspondiente al servidor web, hay que configurar algunos parámetros muy básicos dentro de varios archivos de configuración.
index.php
/** * Archivo ./index.php **/
A mi personalmente me gusta cambiar siempre el nombre por defecto de la carpeta en la cual están todos los archivos de la aplicación. Por defecto se llama "application", y suelo ponerle un nombre más acorde con el proyecto. Por lo tanto, si renombro la carpeta a por ejemplo "miproyecto", edito la línea en la que se define la siguiente variable:
$application_folder = "miproyecto";
Además, mientras estoy desarrollando la aplicación, permito que el sistema me vaya informando de los posibles errores en el código de la misma. Pero una vez la aplicación ya está en marcha y disponible para el público en general, es preferible que no salgan los molestos errores producidos por PHP, así que cambio la variable para que no los muestre. Aunque claro... si hemos hecho todo bien no tendría que salir ningún error en cualquier caso ;-)
error_reporting(E_ALL); //si queremos que nos muestre los errores error_reporting(E_NONE); //no muestra los errores
config.php
/** * Archivo ./application/config/config.php **/
Este archivo contiene muchas opciones posibles de configuración. Y como todo en Codeigniter, está muy bien documentado y dentro del propio archivo nos ayudan con los comentarios explicándonos para qué sirve X variable o cuáles son las opciones posibles que tiene. De todos modos, voy a poner una lista de las líneas que suelo editar y luego las explicaré una a una:
$config['base_url'] = "http://midominio.com/"; $config['index_page'] = ""; $config['uri_protocol'] = "AUTO"; $config['log_threshold'] = 1; $config['encryption_key'] = "unaClaveLargaYComplicadaConLetrasYNumeros"; $config['sess_cookie_name'] = 'midominio_session'; $config['sess_encrypt_cookie'] = TRUE; $config['sess_use_database'] = TRUE; $config['sess_table_name'] = 'ci_sessions'; $config['cookie_domain'] = ".midominio.com"; $config['cookie_path'] = "/"; $config['global_xss_filtering'] = TRUE;
- Esta línea le indica a Codeigniter dónde está alojado el proyecto, y la utiliza para varias de sus funciones. Una de ellas es por ejemplo base_url(); que no hace más que "imprimirnos" lo que aquí hemos especificado. Si trabajamos en un servidor local, bastaría con editarla y poner http://localhost/ o como quiera que esté configurado.
- Por defecto, las direcciones de Codeigniter muestran el "index,php", lo cual aunque no hace daño, molesta un poco a la vista (dwpalma.com/index.php/blog Vs. dwpalma.com/blog). El primer paso para evitarlo, es dejar esta variable en blanco, el segundo lo veremos más adelante cuando hablemos del archivo .htaccess
- Se utiliza para definir cómo recibirá Codeigniter el texto con la URL (que básicamente funciona así: http://midominio.com/controlador/metodo/parametro1/parametro2...). Dependiendo de cómo esté configurado el servidor, puede funcionar con uno u otro. Si en AUTO observamos que hay páginas que no se cargan, hay que ir probando las diferentes opciones hasta dar con la adecuada.
- Cuando estoy desarrollando el proyecto, éste valor lo tengo en 4, el más alto. Así los logs registran absolutamente todo lo que va haciendo Codeigniter. Luego cuando ya lo publico, lo dejo en 1 (con lo que registra únicamente los errores) o incluso en 0 para que no registre nada.
- Las cookies de sesión las guardo cifradas por seguridad. Y para hacerlo, hay que definir esta variable, que no es más que un "salt" para la función que las cifra/descifra. Debería tener mínimo 32 caracteres en total. Un buen sitio para obtener un salt seguro podría ser, por ejemplo, éste: http://maord.com/.
- Es simplemente el nombre que le doy a la cookie de la sesión. Se puede dejar el nombre por defecto o ser creativo :-)
- Aquí le decimos a Codeigniter si queremos que las cookies estén cifradas o no. Como comento en el punto 5 así lo hago habitualmente, así que dejo el valor en TRUE.
- Además de cifradas, las cookies suelo almacenarlas en la Base de Datos.Tiene ventajas e inconvenientes, pero nuevamente por seguridad, decido que se almacenen en la Base de Datos.
- El nombre de la tabla en la que se guardan las cookies. Es el nombre por defecto y normalmente no lo cambio.
- El dominio al que hace referencia y al cual está asociado la cookie. Poniendo un "." (punto) delante del dominio y sin las "www" nos aseguramos de que sea válido para tanto para el dominio en sí como para posibles subdominios de él mismo.
- El path de la cookie por regla general será suficiente con dejarlo en "/". Si tuviéramos un sitio web en el que, bajo el mismo dominio conviviesen diferentes instalaciones de diferentes aplicaciones, convendría separar las cookies de cada una de ellas y además aplicarles el path adecuado. Por ejemplo "/foro" para un foro instalado en http://midominio.com/foro y "/blog" para un blog.
- Nuevamente por seguridad, dejo esta variable en TRUE. Nos previene de posibles ataques mediante XSS. Aunque suelo cerciorarme de que todos los formularios están bien validados y pasen un control de seguridad, no está de más aplicar esta configuración por si se nos ha escapado algo por algún sitio.
routes.php
/** * Archivo ./application/config/routes.php **/
En éste archivo es donde tendremos que ir configurando las rutas "especiales" de nuestra aplicación. Pongo especiales y entrecomillado porque lo que haremos aquí será simplemente como una redirección. Por ejemplo si una URL de nuestra aplicación tendría que ser estrictamente "http://midominio.com/controlador/metodo/1" podríamos convertirla a "http://midominio.com/controlador/metodo/pagina/1" y que Codeigniter la entendiera mediante la correcta configuración de una ruta. No voy a ponerme a explicar detalladamente cómo funcionan las rutas porque no es el objeto de esta entrada. Para el que le interese, puede pasarse por la guía oficial donde lo hacen muy bien: http://codeigniter.com/user_guide/general/routing.html.
Lo que sí voy a hacer es comentar brevemente una de las líneas que vienen por defecto, concrétamente la siguiente:
$route['default_controller'] = "portada";
Con esto definimos a qué Controlador llamará Codeigniter si no especificamos ninguno, es decir cuando vayamos a la dirección "http://midominio.com". De este modo, no tendríamos que escribir, por ejemplo, "http://midominio.com/portada". Cabe destacar también que haciendo esto podremos llamar también a los métodos de ese controlador sin tener que especificarlo. "http://midominio.com/portada/metodo" quedaría convertido en "http://midominio.com/metodo", aunque las dos opciones serían igualmente válidas.
database.php
/** * Archivo ./application/config/database.php **/
Aquí simplemente se recoge la configuración necesaria para conectarse a nuestra Base de Datos. No tiene ningún misterio así que no voy a explicar nada acerca de él, sólo que hay que tenerlo presente cuando vamos a empezar el proyecto... ¡si no no podríamos trabajar con la Base de Datos!
autoload.php
/** * Archivo ./application/config/autoload.php **/
En este archivo se definen qué librerías se cargan automáticamente sin necesidad de tener que declararlas en los constructores de cada Controlador. Aunque no ocupan mucho en memoria, conviene no excederse con ellas y dejar solamente las que seguro que necesitaremos en todos los controladores sí o sí. Una configuración habitual sería, por ejemplo:
$autoload['libraries'] = array('database', 'session', 'auth_library');
// 'auth_library' es la librería que utilizo para identificar a los usuarios registrados
$autoload['helper'] = array('url');
$autoload['config'] = array('site_config');
// siempre suelo tener un archivo de configuración creado por mi con diferentes valores, que cargo desde aquí
Como siempre, el propio archivo cuenta con unos comentarios y ejemplos que ayudan bastante para saber cómo autocargar las diferentes librerías.
.htaccess
/** * Archivo ./.htaccess **/
Como comentaba en el apartado dedicado al archivo config.php necesitamos configurar correctamente el archivo .htaccess en el directorio raiz del servidor web para que no se muestre el "index.php" en las URL de Codeigniter. Lo primero que hay que hacer es asegurarse de que nuestro servidor o hosting admite la posibilidad de tener un archivo .htaccess. Lo segundo, es que hay que tener activado el mod_rewrite de Apache (consulta con el administrador del servidor si no sabes cómo hacerlo).
Dicho esto, veamos qué es necesario incluir en el archivo para conseguir eliminar el molesto "index.php" de nuestras URLs:
RewriteEngine On
RewriteBase /application
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Naturalmente, si hemos renombrado el directorio de la aplicación por otro, en la línea 2 deberemos escribir el nombre de ese directorio y no "/application". Siguiendo con mi ejemplo debería ser "/miproyecto", tal y como especifico en el primer apartado para el archivo "index.php".
Otra línea que suelo añadir es la siguiente:
RewriteCond $1 !^(index\.php|public|robots\.txt)ç
En mis proyectos, creo un directorio llamado "public" en la raiz del servidor, donde voy alojando los diferentes elementos que puedan hacer falta en subdirectorios. Por ejemplo "./public/css", "./public/images", o "./public/javascript". Para que Codeigniter, cuando hago referencia a "http://midominio.com/public/css/main.css", no piense que estoy llamando a un Controlador llamado "public", necesito que el Apache sepa que esa dirección hace referencia a un directorio y no "se la pase" a Codeigniter, si no que interprete él directamente lo que haya en ese archivo y lo mande al navegador directamente.
En fín, de momento ésto es todo, espero que no me haya salido un artículo pesado de leer y que a alguien le pueda servir todo lo aquí expuesto algún día.
Puedes publicar el enlace de 'auth_library'.
Gracias por este interesante entrada. Espero que te animes a escribir más sobre CodeIgniter
permalink