Introducción al patrón MVC con CodeIgniter

Selección_066

Los Frameworks ayudan en el desarrollo de software, proporcionan una estructura definida la cual ayuda a crear aplicaciones con mayor rapidez. Ayuda a la hora de realizar el mantenimiento del sitio gracias a la organización durante el desarrollo de la aplicación.

Los Frameworks son desarrollados con el objetivo de brindarles a los programadores y diseñadores una mejor organización y estructura a sus proyectos.

Se utiliza la Programación Orientada a Objetos (POO), permitiendo la reutilización de nuestro código, aparte de que imponen patrones de diseño como MVC.

Pero no todos los frameworks disponibles para php tienen las mismas características. La lista de frameworks disponibles para php es muy grande , Symfony, Zend, Laravel, CodeIgniter, CakePHP, Kumbia, etc.

Es recomendable usar un framework php si desarrollas aplicaciones web complejas con mucha lógica de negocio. Para asegurar el mantenimiento y las ampliaciones futuras de la aplicación, es necesario que el código sea ligero, legible y efectivo…pero esto no siempre es así, depende del Framework escogido.

Si buscamos rapidez y facilidad a la hora de desarrollar un proyecto con una envergadura no muy grande hay frameworks más recomendados y que ayudarán potenciando las posibilidades sin convertirse en una carga.

Symfony es un gran Framework pero a la hora de decantarse por el para desarrollar una aplicación web de mediano o pequeño tamaño hay que comentar unas consideraciones, una de estas consideraciones es que es algo difícil de manejar en servidores compartidos y otra, la más importante, es que para un proyecto pequeño o mediano podríamos estar malgastando recursos usando Symfony al ser un Framework más pensado para proyectos de gran envergadura. Además en Symfony la configuración es más compleja al usar muchos archivos de configuración.

En estos casos se adaptan mejor otros frameworks más ligeros y más adecuados para proyectos más pequeños, que nos permitan un desarrollo rápido sin sacrificar recursos.

Hay varios que se pueden adaptar a estas características como por ejemplo CodeIgniter o el prometedor Laravel del cual hablaré en otros posts.

Nos centraremos en una introducción al desarrollo de aplicaciones con el framework Codeigniter.

CodeIgniter es muy similar a Symfony, pero gana hacia la facilidad de configuración y uso. Por otro lado Symfony da mucho juego a la hora de desarrollar proyectos de gran envergadura gracias a su robustez, mientras que CodeIgniter se podría considerar como el hermano pequeño de Symfony.

Codeigniter es un producto de código libre, libre de uso para cualquier aplicación.

Como cualquier otro framework, Codeigniter contiene una serie de librerías que sirven para el desarrollo de aplicaciones web y además propone una manera de desarrollarlas que debemos seguir para obtener provecho de la aplicación. Esto es, marca una manera específica de codificar las páginas web y clasificar sus diferentes scripts, que sirve para que el código esté organizado y sea más fácil de crear y mantener. CodeIgniter implementa el proceso de desarrollo llamado Model View Controller (MVC), que es un estándar de programación de aplicaciones, utilizado tanto para hacer sitios web como programas tradicionales.

CodeIgniter no es magia, pero contiene muchas ayudas para la creación de aplicaciones PHP avanzadas, que hacen que el proceso de desarrollo más rápido. A la vez, define una arquitectura de desarrollo que hará que programemos de una manera más ordenada y contiene diversas herramientas que ayudan a hacer aplicaciones más versátiles y seguras.

CodeIgniter y otros frameworks PHP pueden ayudarte a dar el salto definitivo como desarrollador PHP, creando aplicaciones web más profesionales y con código más reutilizable, con la diferencia que CodeIgniter está creado para que sea fácil de instalar en cualquier servidor y de empezar a usar que cualquier otro framework. Además muchas de sus utilidades y modos de funcionamiento son opcionales, lo que hace que goces de mayor libertad a la hora de desarrollar sitios web.

Características generales de CodeIgniter

Algunos de los puntos más interesantes sobre este framework, sobre todo en comparación con otros productos similares, son los siguientes:

– Versatilidad: Quizás la característica principal de CodeIgniter, en comparación con otros frameworks PHP. CodeIgniter es capaz de trabajar la mayoría de los entornos o servidores, incluso en sistemas de alojamiento compartido, donde sólo tenemos un acceso por FTP para enviar los archivos al servidor y donde no tenemos acceso a su configuración.

– Facilidad de instalación: No es necesario más que una cuenta de FTP para subir CodeIgniter al servidor y su configuración se realiza con apenas la edición de un archivo, donde debemos escribir cosas como el acceso a la base de datos. Durante la configuración no necesitaremos acceso a herramientas como la línea de comandos, que no suelen estar disponibles en todos los alojamientos.

– Flexibilidad: CodeIgniter es bastante menos rígido que otros frameworks. Define una manera de trabajar específica, pero en muchos de los casos podemos seguirla o no y sus reglas de codificación muchas veces nos las podemos saltar para trabajar como más a gusto encontremos. Algunos módulos como el uso de plantillas son totalmente opcionales. Esto ayuda muchas veces también a que la curva de aprendizaje sea más sencilla al principio.

– Ligereza: El núcleo de CodeIgniter es bastante ligero, lo que permite que el servidor no se sobrecargue interpretando o ejecutando grandes porciones de código. La mayoría de los módulos o clases que ofrece se pueden cargar de manera opcional, sólo cuando se van a utilizar realmente.

– Documentación tutorializada: La documentación de CodeIgniter es fácil de seguir y de asimilar, porque está escrita en modo de tutorial. Esto no facilita mucho la referencia rápida, cuando ya sabemos acerca del framework y queremos consultar sobre una función o un método en concreto, pero para iniciarnos sin duda se agradece mucho.

Instalación y configuración de CodeIgniter

Requisitos de servidor

Servidor PHP 5.1.6

Por lo que respecta a las bases de datos, CodeIgniter es compatible con unas cuantas, las más habituales en desarrollo de webs: MySQL (4.1 o posterior), MySQLi, MS SQL, Postgres, Oracle, SQLite, y acceso a cualquier base de datos en entornos Windows por ODBC.

Descarga de CodeIgniter

Podemos descargar la versión más actualizada de CodeIgniter directamente desde su página web.

http://ellislab.com/codeigniter

Instalación de CodeIgniter en 4 sencillos pasos

 1.- Descomprimir el paquete

 2.- Sube codeIgniter a tu servidor

Opción A: Si estás programando en tu servidor local, tendrás que copiar simplemente los archivos de codeIgniter en el directorio de publicación de tu servidor. Puedes colocar los archivos en la raíz del directorio de publicación o bien en un subdirectorio cualquiera.

Opción B: Si estás subiendo CodeIgniter a un servidor web de Internet, en un espacio que tengas contratado de hosting, deberás subir por FTP todos los archivos. Lo general es que copies CodeIgniter en la raíz de tu dominio, para que todas las páginas del dominio se sirvan a través del framework PHP, pero nada te impide copiar CodeIgniter en un subdirectorio particular, para que tu dominio web sólo funcione bajo CodeIgniter en la carpeta donde lo has subido.

Selección_068

Estos son los directorios y archivos los cuales se compone codeigniter. Como se puede observar incluye un bonito .gitignore por si vas a trabajar usando GIT y quieres que se ignoren ciertos archivos en las operaciones con git.

El directorio user_guide es opcional, se trata de una guía del framework, todo un detalle. XD

Los permisos para trabajar con el framework en un entorno de desarrollo pueden ser 755 o 777. En un entorno de producción es recomendable usar los permisos 644.

chmod -R 644 application system index.php

Para incrementar la seguridad se pueden colocar los directorios application y system fuera del directorio web raíz para que no se puedan acceder a través del navegador, en este caso habría que editar el archivo index.php para indicarlo :

$system_path = ‘../system’;
$application_folder = ‘../application’;

Otra opción segura es renombrar los directorios application y system…y también habría que indicarlo en index.php en las variables mencionadas.

Por defecto estos dos directorios inlcuyen un .htaccess que deniega el acceso directo.

3.- Configura la URL base de tu aplicación web

Necesitas decirle a CodeIgniter la URL base de tu aplicación, es decir, la URL para acceder a la raíz de CodeIgniter, según en el servidor y directorio donde lo has colocado, es decir, donde has subido el código del framework.

Para ello tienes que abrir el archivo de configuración, que se encuentra en application/config/config.php, con cualquier editor de texto y cambiar la variable de configuración llamada que se guarda en $config[‘base_url’].

Si hemos instalado en local CodeIgniter pondremos http://localhost/ y si además lo colocamos en un directorio específico podría ser algo como

http://localhost/directorio_codeigniter/

Si hemos instalado el framework en un dominio de Internet podremos indicar algo como http://dominio.com/ y si hicimos una carpeta para subir CodeIgniter en ella pondremos el nombre del dominio y luego el nombre de la carpeta o carpetas, separadas por barras y acabando siempre en una barra:

http://dominio.com/carpeta/otracarpeta/

Según nos indican en el manual de instalación, aparte de este dato podemos opcionalmente escribir una llave de encriptación en la variable $config[‘encryption_key’], que servirá si deseamos usar la clase de encriptado que proporciona CodeIgniter o queremos que nuestras variables de sesión estén encriptadas, algo que hace el framework de manera transparente para nosotros.

Ejemplo:

application/config/config.php, modificaremos las variables:

la ruta en la que se encuentra la aplicación

$config[‘base_url’] = “http://localhost/mywonderfulapp/”;

el idioma de la aplicación

$config[‘language’] = “spanish”;

la clave de encriptado

$config[‘encryption_key’] = “clave”;

Para que esto tenga sentido debes usar una clave larga (32 caracteres), con mayúsculas, minúsculas, números y símbolos. Si vas a encriptar las cosas hazlo bien, y no lo hagas con un simple 1234.

4. Configurar la base de datos

En este último paso tendrás que indicar los datos de acceso a la base de datos que piensas utilizar con CodeIgniter, ya que prácticamente todas las aplicaciones web que podrás crear con el framework van a tener que utilizar la base de datos para algo.

Para ello tenemos que editar el archivo application/config/database.php e indicar los parámetros de conexión al servidor de base de datos, como el nombre del servidor y nombre de la base de datos, el usuario y la contraseña.

la dirección de la base de datos

$db[‘default’][‘hostname’] = “localhost”;

un nombre de usuario de esa base de datos

$db[‘default’][‘username’] = “usuario”;

su contraseña correspondiente

$db[‘default’][‘password’] = “clave”;

el nombre de la base de datos con la que vas a trabajar

$db[‘default’][‘database’] = “nombre_base_de_datos”;

Para trabajar con bases de datos es necesario cargar la librería database, la autocarga de librerías se puede indicar desde el archivo application/config/autoload.php

 $autoload[‘libraries’] = array(‘database’);

LOS PAQUETES DE IDIOMAS SE COPIAN EN LA CARPETA LANGUAGE DENTRO DE APPLICATION Y EN CONFIG.PHP SE INDICA EL IDIOMA PONIENDO COMO NOMBRE EL DE LA CARPETA.

Con esto ya tenemos todo listo para comenzar a crear nuestras aplicaciones web PHP y crear nuestro imperio. Podemos testar CodeIgniter accediendo a la URL donde lo hemos instalado. Debemos ver el mensaje de bienvenida de CodeIgniter que nos confirma que está funcionando.

Selección_069

Primeros pasos

Cuando hemos entrado en la dirección del servidor para comprobar que CI estaba funcionando, la web de bienvenida que hemos visto nos la ha servido el controlador welcome.php (el archivo welcome.php esta dentro de la carpeta application/controllers/

Este controlador nos responde con la vista correspondiente que es el archivo welcome_message.php que esta dentro de application/views/

Una de las características de la arquitectura MVC es que todas las peticiones que hace el usuario pasan por el controlador quien consulta al modelo o la vista para devolver el resultado.

El controlador según las acciones del usuario se encargará de hacer las peticiones oportunas al modelo para que este le devuelva la información y esa información pasarla a la vista para que esta le devuelva la vista oportuna que enviará al usuario.

c01

Dentro de application/config/routes.php hay una variable que se llama controlador por defecto (default_controller) que es la que indica cual es el controlador(la clase del controlador) que se va cargar por defecto al entrar en la direccion URL del proyecto.

$route[‘default_controller’] = “welcome”;

Vamos a cambiar esto para hacer que se cargue un controlador propio.

$route[‘default_controller’] = “hola_mundo”; // nombre de la clase

Si recargo la pagina me devuelve un error 404 ya que falta crear nuestro controlador.

 Para crear nuestro controlador crearemos un archivo php dentro de application/controllers/ llamado hola_mundo.php.

Incluiremos el siguiente código:

Selección_070

En el método index hay una sentencia que cargará la vista, que la tendremos que crear en application/views/

Dentro de esa carpeta crearemos un archivo web php llamado hola_mundo.php que contendrá el codigo HTML que se verá por pantalla.

Selección_071

Ahora cuando carguemos http://localhost/directorioCI/

Ya nos saldrá la nueva vista.

Desde la url se podrá llamar a controladores(clases PHP) y a sus métodos, y pasar parámetros a estos.

http://localhost/directorioCI/controlador/metodo/parametro

URLs amigables a buscadores

Uno de los puntos fuertes de este framework PHP es que las URL se presentan siempre en un formato amigable a los buscadores. Esto quiere decir que cualquier motor de búsqueda puntuará positivamente, a priori, las direcciones de las páginas. Del mismo modo, las direcciones tendrán una forma fácil de entender y recordar por los seres humanos.

Estas son URLs que NO suelen ser puntuadas bien por los buscadores:

http://www.midominio.com/articulos.php?id=32

http://www.midominio.com/articulos.php?nombre=miarticulo

Si lo vemos, tenemos una página, articulos.php, que se le pasan distintos parámetros. Pero los buscadores muchas veces interpretan que es la misma página.

Con Codeigniter las URL tienen mucha mejor arquitectura, con formas como estas:

http://www.midominio.com/articulos/muestra/32

http://www.midominio.com/controlador/funcion/parametro

Las diferencias saltan a la vista, tanto para nosotros humanos como para motores de búsqueda como Google. Y lo bueno es que nosotros no tenemos que hacer nada para conseguir este tipo de direcciones.

Query String desactivado

En CodeIgniter en principio está desactivada la posibilidad de envío de variables a través de la URL, lo que se conoce en inglés como Query String. Es decir, que direcciones en las que se envían variables a través de las URL, que decíamos que eran poco amigables a buscadores, no funcionarán.

Si se desea, se puede hacer que CodeIgniter reconozca las variables enviadas por la URL, pero como en principio el sistema de URLs amigables a buscadores que implementa el framework está pensado para poder evitar el problemático Query String, su uso está desactivado.

Segmentos de la URL y el modelo – vista – controlador

Cada una de las partes de la URL de las aplicaciones creadas con el framework sirve para identificar qué controlador se va a hacer cargo del procesamiento de la página, así como de la función que se invocará y los parámetros que se le enviarán a la misma. Por ejemplo:

aplicacioncodeiginter.com/facturacion/editarempresa/5610

aplicacioncodeiginter.com es el nombre del supuesto dominio donde tenemos CodeIgniter instalado.

  • facturacion es el nombre del controlador que se encargará de procesar la solicitud.

  • editarempresaes el nombre de la función que habrá dentro del controlador y donde estará el código que ejecute y genere la página. Aunque para ser correctos, como el controlador está en programación orientada a objetos, en vez de función, deberíamos llamarle método.

  • 5610, es el parámetro que se le pasa a la función editarempresa, que servirá en este caso para que editarempresa sepa cuál es la empresa que se desea editar. Si queremos o necesitamos enviar varios parámetros a esta función, y no sólo el identificador de la empresa a editar, podremos colocarlos a continuación, separados por barras.

CodeIgniter pone a nuestra disposición una clase para trabajar con URLs llamada URI Class y una librería llamada URL Helper que contienen funciones para trabajar fácilmente con URLs y datos enviados en las mismas. En estas librerías hay funciones tan interesantes como site_url() que sirve para que el propio CodeIgniter cree una URL dentro del sitio a partir de un parámetro que le pasemos. Otro ejemplo es base_url(), que simplemente devuelve la URL raíz donde está nuestra aplicación CodeIgniter.

Todo pasa por index.php

En CodeIgniter existe un index.php que está en la raíz del framework que se encarga de las funciones de enrutamiento hacia el controlador que se debe encargar de procesar la solicitud. Por ello, de manera predeterminada en CodeIgniter veremos que las URLs incluyen el nombre del archivo index.php.

http://pruebas.com/index.php/empresas/editar/1

Este comportamiento se puede configurar.

Pues bien, si deseamos eliminar el index.php de esta URL, para simplificar la dirección, hacerla todavía más amigable a buscadores y también más entendible por los seres humanos, podemos utilizar un archivo .htaccess.

Así pues, podríamos conseguir que nuestras direcciones no tuvieran siempre el mencionado index.php y quedasen con una forma similar a esta:

http://pruebas.com/empresas/editar/1

Vamos a explicar un modo que está disponible en la propia guía de uso de CodeIgniter.

Se trata de utilizar un método de trabajo con .htaccess que llaman “negativo”, donde todas las URLs son redirigidas a través del archivo index.php, a no ser que tengan una forma determinada que no queramos que se redireccione.

Por ejemplo, una URL como esta:

http://www.loquesea.com/empresas

Se redirigiría a una URL como esta otra:

http://www.loquesea.com/index.php/empresas

Pero esa redirección se haría de manera transparente al usuario y al navegador que nos visita. Es decir, el procesamiento de la página se hace a través del index.php, pero nosotros no llegamos a percibir que en el servidor se ha llevado a cabo esa redirección, quedando la URL en la barra de direcciones siempre sin el index.php.

Ahora bien, hay determinadas direcciones que no vamos a desear que se redirijan, como puede ser una hoja de estilos CSS. Es decir, podemos tener en nuestro servidor un archivo como este:

http://www.loquesea.com/css/estilos.css

Y en ningún caso queremos que se procese a través del index.php, sino que directamente se devuelva el archivo CSS que hay en esa ruta. Este es el caso en el que se utiliza el método “negativo” del htaccess, a través del comando “RewriteCond” (condición de redirección). Este caso obvio también lo tendríamos, por ejemplo, en archivos como el robots.txt o aquellos donde podamos tener librerías de código Javascript.

Usando htaccess para eliminar el index.php de CodeIgniter

Así pues, podríamos tener un archivo .htaccess en la raíz de la instalación del framework, que suele ser también la raíz del dominio donde estamos trabajando, con un código como el que sigue:

RewriteEngine on

RewriteCond $1 !^(index.php|css|js|images|robots.txt)

RewriteRule ^(.*)$ /index.php/$1 [L]

Esto diría que se redirijan todos los archivos que se soliciten a este dominio, menos los que contengan el propio index.php, css, js, images o robots.txt.

La redirección se hará a través de la misma URL, pero agregando “index.php/” después del nombre del dominio y antes de lo que haya justo después de ese nombre de dominio.

Nota: si tuviéramos CodeIgniter instalado en un subdirectorio de nuestro dominio, por ejemplo, en el subdirectorio “carpeta”, la regla de redirección “RewriteRule” cambiaría un poco:

RewriteRule ^(.*)$ /carpeta/index.php/$1 [L]

Ahora, sólo nos faltaría decirle a CodeIgniter que, al componer URLs para los enlaces entre las distintas páginas de nuestra aplicación web PHP, no coloque el index.php, pues no lo necesitamos. Esto lo podemos hacer desde el archivo de configuración principal, que están en: application/config/config.php

Simplemente tendríamos que editar la variable de configuración “index_page”, poniéndola la cadena vacía.

$config[‘index_page’] = “”;

Un eujemplo de archivo .htaccess más avanzado y es el que nosotros usaremos:


<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /

 # Impide el acceso a la carpeta del sistema
 # "system" se debe cambiar si el nombre la carpeta se modifica.
 RewriteCond %{REQUEST_URI} ^system.*
 RewriteRule ^(.*)$ /myapp/index.php?/$1 [L]

 # Esto impide el acceso a la carpeta de la aplicación
 # 'application' se debe cambiar si el nombre la carpeta se modifica.
 RewriteCond %{REQUEST_URI} ^application.*
 RewriteRule ^(.*)$ /myapp/index.php?/$1 [L]

 # Comprueba si el usuario está intentando acceder a un archivo válido,
 # como un documento de imagen o CSS, si esto no es cierto
 # se redirecciona a index.php
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ /myapp/index.php?/$1 [L]
 </IfModule>

 # si no esta activo el modulo mod_rewrite de apache
 # para un recurso no encontrado se lanza un error 404 cargando index.php
 <IfModule !mod_rewrite.c>
 ErrorDocument 404 /myapp/index.php
 </IfModule>

Añadir un sufijo a las URL

Otro de los detalles que podemos hacer con CodeIgniter, que pueden personalizar aun más nuestras direcciones URL, es añadir un sufijo, que nosotros deseemos, al final de todas las URL que formen parte del framework. Por ejemplo, podríamos desear que todas las URL acaben en .html o en .php, o como queramos. Esto se puede hacer a través de los archivos de configuración de nuestra app del framework.

application/config/config.php

La idea es que una URL como esta:

http://dom.com/index.php/blog/post/cualquier-articulo

Pase a ser una dirección como esta otra:

http://dom.com/index.php/blog/post/cualquier-articulo.html

Para esto editamos el archivo de configuraciones generales:

application/config/config.php y tenemos que buscar la variable url_suffix y colocar el valor que deseemos, por ejemplo:

$config[‘url_suffix’] = “.html”;

Añadir métodos al controlador

CodeIgniter dispone de un mecanismo sencillo para dar pie a URLs distintas que dependen del mismo controlador. Es decir, podemos asociar a un controlador muchas páginas, con URL distintas, que se ejecutan llamando siempre a un mismo controlador.

Por ejemplo, pensemos que tenemos una tienda online de venta de productos informáticos. Entonces podríamos tener una URL donde se muestran los productos, pero a su vez tendremos muchas clasificaciones de productos y cada cliente podría ver una ficha completa con cada uno de ellos. Todas las fichas de productos se podrían meter dentro de un mismo controlador, dando lugar a distintas URL, como pueden ser las siguientes:

dominio.com/productos

dominio.com/productos/ordenadores

dominio.com/productos/monitores

dominio.com/productos/perifericos/raton_genius

dominio.com/productos/ordenadores/mac_mini/2gigas

dominio.com/productos/ordenadores/mac_mini/4gigas

Todas estas URLs dependen del mismo controlador, que sería el controlador de productos.

Como se puede ver, el primer nombre del directorio después del dominio es el nombre del controlador, en este caso siempre “productos”. Por eso todas las URL que teníamos antes dependen del mismo controlador. Sin embargo, las URL que he colocado aquí son un puro ejemplo, para que se pueda ver cómo se pueden generar URLs que dependen de un mismo controlador.

Lo bueno, como también se puede comprobar viendo esas URL, es que en CodeIgniter siempre se generan URLs sin paso de parámetros, es decir, siempre totalmente amistosas a motores de búsqueda.

http://www.dominio.com/controlador/metodo/parametro

El segundo directorio de la URL se refiere al nombre de la función o método que atenderá esa solicitud dentro del controlador.

Si no se indica ningún nombre de función CodeIgniter siempre invoca a la función llamada index(), así pues, la URL:

dominio.com/productos

Será procesada por la función index() que coloquemos en el controlador. Este es un caso especial, porque no se ha indicado nombre de función, pero dadas URLs como estas:

dominio.com/index.php/productos/ordenadores

dominio.com/index.php/productos/monitores

Tendremos que generar dichos métodos en el controlador, como se puede ver en el siguiente código:

Selección_072

Podemos añadir un nuevo método al ejemplo primero para que cargue otra vista.

Selección_073

Para llamar a ese método a través de la URL tan solo hace falta:

http://localhost/ruta/Hola_mundo/vista2

esto nos devolverá la vista hola2

Lo siguiente de la URL son los parámetros que pasemos al método del controlador, que puede ser mas de uno.

http://www.dominio.com/controlador/metodo/parametro1/ parametro2/….etc

Lo siguiente será ver un par de aclaraciones con las vistas y como se relacionan con los controladores.

Qué son las vistas

Una vista es una página web o un fragmento que se guarda en un archivo aparte. En una vista podríamos guardar, por tanto, toda la estructura de una página, o una sección, como puede ser la cabecera, pie, barra de navegación, etc. El grado de complejidad en el trabajo con vistas podremos marcarlo nosotros, según nuestras preferencias, costumbres de desarrollo o necesidades específicas, dado que podremos anidar unas vistas dentro de otras en cualquier nivel de jerarquía.

Las vistas no se acceden ni se invocan directamente con la solicitud de una URL en nuestra aplicación web, como ya podremos suponer. En realidad son módulos que se invocan desde los controladores, ya que en el modelo – vista – controlador que implementa CodeIgniter, el controlador es quien debe cargar las vistas que necesite para mostrar los resultados al visitante.

Los controladores decidirán qué hacer cuando se reciba una solicitud y las vistas decidirán cómo mostrar los resultados.

En el método index del controlador hola_mundo.php hay una sentencia que cargará la vista, que la tendremos que crear en application/views/

Dentro de esa carpeta crearemos un archivo web php llamado hola_mundo.php que contendrá el codigo HTML que se verá por pantalla.

Almacenar vistas en subdirectorios

Las vistas dentro de application/views/ las podemos organizar por subdirectorios, lo que puede servir de utilidad si vamos a manejar gran número de vistas distintas, que dependen de secciones variadas de la página.

Para ello simplemente creamos un subdirectorio con el nombre que queramos, dentro de “views” y guardamos allí las vistas.

Por ejemplo pensemos que tenemos varias vistas que pertenecen todas a la zona de registro de usuarios y queremos organizarlas en la carpeta “registro” (ruta completa “/application/views/registro”). Entonces, las vistas colocadas allí se invocarían indicando el subdirectorio donde se encuentran, de la siguiente manera:

$this->load->view(‘registro/formulario_registro’);

Crear Template para las diferentes vistas

En un sitio web siempre hay paginas que casi no varían como el <head> , menús de navegación, el pie o footer. Es por eso que es mejor dejar las vistas para los contenidos que van a cambiar y poner en otros archivos por separado esas partes que no van a variar.

Para comenzar a crear un template con esas partes invariables crearemos un directorio dentro de views llamado includes.

/application/views/includes/

Dentro de includes es donde irán los archivos referentes al template que serían los siguientes a modo de ejemplo. (cada uno es libre de organizarlo como quiera)

header.php

Selección_074

Los directorios css y js, en la raíz del proyecto.

Contendría la parte del head HTML con los enlaces a hojas de estilo y scripts js.

base_url(); esta funcion devuelve la ruta base que se especificó en el archivo config.php del directorio application/config/config.php

para que esta función funcione hay que hacer uso de un helper llamado URL

Los helpers son juegos de funciones, ordenados por temática en diferentes paquetes, que nos ayudan en la realización de tareas habituales en las aplicaciones web. Existen helpers para muchas cosas distintas, como para trabajo con arrays, fechas, cookies, emails, URLs, formularios, etc.

Para ello en el archivo application/config/autoload.php

Editamos el valor del array añadiendo el helper url, podemos cargar mas de un helper.

$autoload[‘helper’] = array(‘url’);

$autoload[‘helper’] = array(‘url’, ‘file’, ‘cookie’);

De esta manera cargamos uno o varios helpers para que estén disponibles de manera predeterminada en toda la aplicación sin que los tengamos que cargar cada vez que los pretendamos utilizar. La carga automática nos ahorrará repetir el código de carga de los helpers que deseemos en toda la aplicación

La lista de helpers disponibles y sus funciones se encuentra en el manual oficial.

Siguiendo con el template…

header_body.php

Selección_075

Lo que contenga este archivo es libre depende del diseño.

footer.php

Selección_076

 Con footer lo mismo, depende del diseño…pero será aquí donde se cerraría el body y HTML.

Ahora hay que fusionar eso con el contenido. Para ello creamos otro archivo dentro de includes/

template.php

Selección_077

En la carga del contenido se pasará una variable donde se indique que contenido(vista) cargar

$this->load->view($main_content); // carga el contenido

Las vistas las crearemos fuera del directorio includes.

Por ejemplo creamos dos vistas llamadas:

contenido1.php

contenido2.php

Dentro pueden contener el HTML que se desee.

Centrándonos en el controlador, para cargar una vista u otra dentro del template se procederá de la siguiente manera.

Selección_078

En este caso en el controlador además de cargar el template le pasamos un valor de manera que muestren una información dada y no siempre lo mismo.

Los datos se envían a las vistas, templates etc a través de arrays asociativos donde la clave de cada elemento del array será el nombre de la variable que va a contener ese valor y que usaremos en la vista como variable de salida.

Ejemplo:

$data[‘main_content’] = ‘contenido2’; // en controlador

$main_content; // en vista o template

Podría enviar un array con mas valores y poder recuperar estos desde el template y sus archivos que cargue este también.

Por ejemplo:

Selección_080

Tanto los valores de los elementos title y main_content los podría usar desde template.php y desde todos los archivos que carga template.php.

Por ejemplo el valor de title en header.php

<title><?php echo $title;?></title>

Esto también me serviría para cargar una vista distinta en el template desde el controlador.

$data[‘main_content’] = ‘contenido1’;

Siguiendo con los controladores

El tercer directorio y los siguientes son los parámetros que se envían a las funciones

Ahora vamos a observar otras URL que dependen del controlador de productos, pero que tienen más de un directorio adicional al nombre del controlador. El primer directorio es el controlador, el segundo el método que se invocará dentro del controlador y ahora veamos que pasa con el tercer parámetro y los siguientes, en caso que haya.

dominio.com/controlador/metodo/parámetros…

dominio.com/productos/perifericos/raton_genius

dominio.com/productos/ordenadores/mac_mini/2gigas

dominio.com/productos/ordenadores/mac_mini/4gigas

Estos directorios adicionales son simples parámetros en los métodos del controlador. Así, por ejemplo, la primera de las URL que acabamos de ver se corresponde con el método “perifericos”, pasándole el nombre del periférico que se desea ver “raton_genius”.

Este dato adicional se puede recibir en el método con un código como este:

Selección_081

Así tenemos el método “perifericos” que recibe el parámetro modelo. Este parámetro tomará el valor del tercer directorio. Entonces en la URL:

dominio.com/productos/perifericos/raton_genius

Estaremos invocando el método perifericos() y pasando como valor en el parámetro $modelo la cadena “raton_genius”.

Esto se puede complicar un poco más en URL como estas:

dominio.com/productos/ordenadores/mac_mini/2gigas

Como se puede comprobar, aquí estamos pasando dos parámetros al método ordenadores() del controlador “Productos”, que podríamos procesar de una manera similar a esta:

 Selección_082

En el anterior método se comprueba qué parámetros se recibe antes de dar por sentado que estamos recibiendo alguno de ellos. Procesará correctamente URLs como estas:

 http://localhost/index.php/productos/ordenadores

http://localhost/index.php/productos/ordenadores/toshiba

http://localhost/index.php/productos/ordenadores/hp/pavillon590

Las salidas con echo en los métodos del controlador es una practica HORRIBLE, en este caso a modo de ejemplo se ha usado echo para la salida pero lo correcto sería cargar la vista correspondiente en cada método con:

$this->load->view(‘vista_correspondiente’);

Código PHP dentro de las vistas

Las vistas en CodeIgniter son bastante flexibles y permiten ejecutar cualquier tipo de código PHP que necesitemos.En principio las acciones que necesitaremos codificar dentro de una vista serán bastante simples, como mostrar el contenido de variables, o realizar algún bucle por alguna estructura de datos.

Sin embargo, nada impide escribir código PHP, lo complejo que queramos, con accesos a recursos del servidor, bases de datos, etc. Sin embargo, insisto que si utilizamos correctamente las vistas, según como se debería en el modelo – vista – controlador, no deberíamos hacer operaciones muy complicadas.

Ya hemos visto como mostrar una el valor de una variable que se pase a la vista cuando se cargue en el controlador.

CodeIgniter dispone además de algunas estructuras de código, adicionales a las que existen en el propio PHP, que podemos utilizar dentro de las vistas y que nos pueden ayudar a reducir nuestro código o a esquematizarlo un poco más.

<?php echo $variable?>

Se puede resumir por este otro:

<?=$variable?>

CodeIgniter también dispone de estructuras de control if, for, foreach y while que se pueden escribir de una manera resumida, en comparación con las estructuras de control habituales en PHP.

Por ejemplo:

Selección_083

La llave que cierra es reemplazada con un endforeach. Cada una de las estructuras de control mencionadas anteriormente tiene una sintaxis similar de cierre: endif, endfor, endforeach, y endwhile

Observe también que en lugar de utilizar un punto y coma después de cada estructura (excepto la última), hay dos puntos. Esto es importante!

Selección_084

Estas maneras nuevas de hacer bucles y condicionales pueden ser útiles para usuarios que no conocen PHP, pero no merece mucho la pena aprenderlas si ya dominamos PHP. Sin embargo, si la responsabilidad de crear las vistas cae sobre un diseñador web que no conoce mucho de PHP, puede que le sea más sencillo utilizar, por ejemplo, el IF de CodeIgniter en vez del IF típico de PHP.

Todo depende de con qué se sienta más cómodo. La ventaja puede ser la sencillez y que en las estructuras de CodeIgniter no hace falta utilizar las llaves en los bucles o estructuras IF. Sin embargo, existe una desventaja y es que CodeIgniter necesitará preprocesar la vista para convertir las estructuras de código de CodeIgniter en las estándares de PHP y esto llevará un tiempo.

Además, cuando tengamos un error de sintaxis en el código de una vista, si estamos utilizando las estructuras de control de CodeIgniter, es muy probable que la línea de código donde PHP informe del error no corresponda con la línea de código en la vista donde hemos hecho algo mal, lo que puede dar algún que otro dolor de cabeza en la etapa de depuración.

Revolver vistas como un dato de tipo string

Cuando cargamos una vista en CodeIgniter la salida producida por ella se envía al usuario visitante una vez haya sido procesado el método del controlador que invoca esa vista.

Este comportamiento es el estándar dentro del framework, pero también podríamos conseguir que el código HTML resultante de cargar una vista se devuelva al controlador para poder almacenarlo en una variable y hacer con él lo que podamos necesitar.

Esto lo conseguimos enviando un tercer parámetro al método que carga una vista, con un valor true, que indica justamente eso, que deseamos que el método devuelva el código procesado por la vista.

$cadena = $this->load->view(‘mivista’, ”, true);

La línea de código anterior provocaría que la carga de la vista se almacene en la variable $cadena. Como se puede ver, al llamar a la vista tenemos que indicar el nombre de la vista, seguido con el nombre del array que contiene los datos para configurar la vista (o comillas si no estamos pasando datos a la vista), y finalmente el valor true como tercer parámetro.

En un esquema como este, el contenido de la vista no se enviaría al navegador, a no ser que luego hagamos un echo de la variable $cadena o algo parecido.

Modelos

Los modelos en la práctica son clases, de programación orientada a objetos, que tienen sus métodos o funciones, a los que se puede invocar desde los controladores para hacer operaciones con la base de datos.

Los modelos contendrán una serie de funciones o métodos para realizar las operaciones típicas con la base de datos. Por ejemplo, pensemos en una aplicación que tiene que trabajar con usuarios. Entonces tendremos un modelo de usuarios que tendrá una serie de funciones, como la selección de usuarios, inserción, actualización y borrado. Nuestra aplicación generalmente tendrá varios modelos, para trabajar con cada una de las tablas de nuestra base de datos.

Bases de la construcción de modelos en CodeIgniter

Los modelos se construyen extendiendo la clase Model y tenemos que nombrarlos con la primera letra en mayúsculas.Dentro del modelo que estamos creando tenemos que definir obligatoriamente un constructor, donde tenemos que hacer una llamada al constructor de la clase de la que hereda (clase parent, llamada Model).

Este sería el modelo más básico, que está vacío, ya que no tiene ninguna función para operar con la base de datos. Mostramos primero el código básico de un modelo en PHP 5, donde los constructores tienen el nombre __construct().

Selección_085

Los modelos se han de guardar en la carpeta “application/models/”. El nombre de archivo del código del modelo debe tener extensión .php y se ha de escribir con todas las letras en minúsculas. Por ejemplo nuestro modelo, cuya clase que se llama “Nombre_model”, deberíamos guardarlo en la ruta:

/application/models/nombre_model.php

Si lo deseamos, podemos organizar nuestros modelos por subdirectorios, siempre dentro de la carpeta “application/models/”. Simplemente cuando los carguemos tendremos que indicar en qué carpeta están localizados.

Cargar un modelo

La carga de un modelo se realiza desde el controlador que lo va a utilizar, por medio del método de carga de modelos, con un código como este:

$this->load->model(‘Nombre_model’);

Esto supone que el modelo está en el directorio general de los modelos (application/models).

Ahora, si pretendiésemos cargar un modelo que está en un subdirectorio, tendríamos que indicar la ruta en la función de carga del modelo.

$this->load->model(‘carpeta_del_modelo/Nombre_model’);

Si queremos cargar varios modelos de una sola vez, podemos hacerlo pasando un array con todos los modelos que deseamos cargar:

$this->load->model(array(‘Cliente_model’,’Factura_model’));

Una vez cargado un modelo, sus métodos para el acceso a los datos estarán disponibles en nuestro controlador, a través del propio objeto controlador, el nombre del modelo que queremos accionar y la función que queremos invocar dentro del modelo.

$this->Nombre_model->metodo_del_modelo();

 Carga automática de modelos

Si deseamos cargar automáticamente uno o varios modelos cada vez que se inicia cualquier solicitud de página en nuestra aplicación web, es decir, sin que tengamos que cargarlos explícitamente desde los controladores, podemos especificar en el archivo de configuración “autoload.php” cuáles son los modelos que vamos a requerir siempre.

Este archivo de configuración se encuentra en la ruta “application/config/autoload.php”. Tenemos que modificar la lista de modelos a cargar en la variable de configuración “model”, con un código como este:

$autoload[‘model’] = array(‘Usuario_model’, ‘Empresa_model’);

Esto cargaría el modelo de usuarios y el modelo de empresas en todas las páginas de nuestra aplicación web con CodeIgniter.

Ejemplo de controlador que utiliza modelos

Para que se pueda ver mejor cómo utilizar un modelo desde un controlador, veamos un ejemplo.

A continuación tenemos un esquema de un controlador que utiliza los modelos para extraer datos de la base de datos y enviarlos a una vista para mostrarlos en la página.

Selección_086

Este controlador llamado Factura tiene una método para mostrar una factura, que recibe el identificador de la factura que se desea ver.

  • En dicho método se carga el modelo adecuado para el trabajo con facturas “Factura_model”.

  • Luego llamamos a la función dame_factura_id() del modelo cargado, a la que le pasamos el identificador de la factura que deseábamos ver.

  • La función dame_factura_id() del modelo devuelve un array con los datos de la factura. Luego mostramos los datos de la factura con la vista “mostrar_factura” y con los datos de configuración, que es el array que obtuvimos al invocar la función del modelo.

Conectar con una base de datos

Existen diversos modos de conexión, automática y manual.

El método más sencillo para hacer la conexión con la base de datos es la conexión automática. Ésta la realiza CodeIgniter por nosotros en cada página que se solicite al servidor y tenemos que configurarla en el archivo de configuración autoload.php (application/config/autoload.php).

En ese archivo veremos un array de librerías que se incluirán en todos los controladores. En ese array tenemos que colocar la librería ‘database’, de una forma como esta:

$autoload[‘libraries’] = array(‘database’, ‘otras_librerias…”);

Además, tendremos que modificar otro archivo de configuración llamado database.php (application/config/database.php). esto ya se ha visto en la parte de inicial de instalación del Framework.

Practica de prueba en CodeIgniter

Haremos una simple práctica que mostrará artículos de una base de datos.

1.- Crear un controlador

Selección_087

Simplemente hemos colocado una función index(), que es la que se llamará cuando se acceda a este controlador tal cual. Dentro de index estamos cargando el template con la vista “home”.

 Este controlador lo tenemos que guardar en un archivo llamado articulos.php que meteremos en el directorio de los controladores: application/controllers.

2.- Creamos la vista “home”

La vista home se cargará dentro del template por lo que la vista “home” solo contendrá el contenido principal.

 Selección_088

Guardamos esta vista como “home.php” en el directorio de las vistas: application/views. No dentro de includes, ese solo contiene el template.

3.- Configuramos este controlador como controlador por defecto

 Ahora podríamos acceder a este controlador por medio de una URL como esta:

 http://localhost/dir_proyecto/articulos

Deberíamos ver el contenido de nuestra vista, con la bienvenida al sitio. No obstante, yo quiero que este controlador sea el controlador por defecto, para que cuando accedamos a la raíz de la aplicación se muestre ese contenido de bienvenida.

Para ello, voy a editar el archivo de configuración routes.php

(application/config/routes.php).

Se busca la variable de configuración “default_controller” para colocar el nombre de este controlador:

$route[‘default_controller’] = “Articulos”;

Ahora podremos acceder a la URL raíz de CodeIgniter y ver el mismo mensaje de bienvenida, en una url como esta:

http://localhost/dir_proyecto/

4.- Creo una tabla “articulos” en la base de datos

Selección_089

Antes de salir de PhpMyAdmin, o cualquier otro gestor de base de datos, vamos a insertar manualmente unos cuantos registros en la tabla de “articulo” con datos de prueba.

5.- Configuro CodeIgniter para la conexión con esta base de datos

Ahora voy a decirle a CodeIgniter que realice una conexión automática con la base de datos que acabo de crear, que se active en todas las páginas de dentro de mi sitio web. Para ello comienzo editando el archivo de configuración database.php (application/config/database.php) donde deben figurarlos datos de la base de datos que deseo utilizar.

Tenemos que editar al menos los siguientes datos:

$db[‘default’][‘hostname’] = “localhost”;

$db[‘default’][‘username’] = “usuario”;

$db[‘default’][‘password’] = “password”;

$db[‘default’][‘database’] = “nombre_bd”;

Se puede saltar el anterior paso si esto lo hemos hecho al principio de instalar codeigniter

Ahora debo decirle a CodeIgniter que conecte automáticamente, incluyendo siempre las librerías de conexión con base de datos. Para esto tenemos que editar el archivo de configuración autoload.php (application/config/autoload.php), en el lugar donde se indica qué librerías queremos cargar siempre.

$autoload[‘libraries’] = array(‘database’);

6.- Creo un primer modelo de artículos

Ahora se crea una primera aproximación al modelo de artículos. Por el momento sólo se va a colocar una función para traer los últimos 2 artículos.

Selección_090

En este modelo estamos utilizando las propias funciones de acceso a base de datos de MySQL. En CodeIgniter existe un mecanismo de abstracción de base de datos que se podría utilizar para escribir código con funciones que sirvan para cualquier tipo de base de datos que podamos utilizar, y no sólo MySQL.

Este modelo lo guardamos en el archivo “articulo_model.php” dentro de la carpeta de los modelos (application/models).

7.- Actualizo el controlador

Actualizamos nuestro controlador inicial, para colocar algunas otras cosas que nos servirán para :

  • Decir que voy a trabajar con el modelo de artículos

  • Enviarle a la vista de la portada (“home”) los datos de los últimos artículos publicados

  • Cargar un helper de URL, que me servirá de utilidad dentro de la vista para construir las URL para ver los artículos.

Si el helper url ya ha sido cargado en config/autoload.php de manera global para todos los controladores no hará falta cargarlo en el controlador:

$autoload[‘helper’] = array(‘url’);

 Selección_091

8.- Actualizo la vista “home”

Ahora vamos a cambiar el código de nuestra vista “home”, puesto que queremos que nos muestre también los últimos artículos publicados en el sitio, cada uno con un enlace a la URL donde se muestre cada artículo.

Selección_092

Estamos haciendo un recorrido a los registros de últimos artículos traídos desde la base de datos con ayuda del modelo y enviados a la vista por medio del controlador.

Además, vemos que se está utilizando la función site_url() que pertenece al helper “url” que habíamos cargado en el controlador. Esta función devuelve una URL del sitio, como se especifica en el archivo de configuración, añadiendo lo que se le indique en ella.

Aquí también estamos utilizando directamente funciones de MySQL. Sin embargo, CodeIgniter tiene algunas librerías ayudan a hacer esto de otra manera.

Una vez actualizada la vista, podemos acceder a la página raíz de nuestra aplicación, que debería mostrar los últimos artículos que habían cargados en la base de datos, en la tabla articulos, con un enlace a varias páginas, donde se muestra cada uno de los artículos (no creadas todavía).

Como se puede ver, tenemos una URL que pasa por el directorio artículos (el controlador de artículos), el directorio muestra (que es la función que tenemos que realizar en el controlador para atender esta URL) y el número del identificador del artículo que deseamos ver (que es el parámetro que se enviará a la función muestra() del controlador).

Así pues, tenemos que hacer varias cosas para que esas URL funcionen y muestren el contenido de los artículos.

9.- Ampliación del modelo

Vamos a proceder a que el modelo tenga una función que devuelva los datos de un artículo cuyo identificador se pasará por parámetro. La nueva función devolverá un array con los datos del artículo encontrado, o false en caso que no encuentre el artículo.

Selección_093

10.- Ampliación del controlador

En este momento queremos que el controlador de artículos también muestre las páginas con los artículos, que tendrán URL como estas:

http://localhost/dir_proyecto/articulos/muestra/3

Tenemos que crear el método muestra() en el controlador, que recibe un parámetro que es el id del artículo que se desea ver. Esta método tendrá que solicitar al modelo los datos del artículo en cuestión y enviarlos a una vista para que los muestre. Además, en caso que se intente acceder a artículos que no existen en la base de datos, tenemos que mostrar un error 404 de página no encontrada.

Selección_094

Nos tenemos que fijar en la nueva función creada: muestra(). En esta función cargamos el modelo de artículos y solicitamos el artículo al modelo. Luego comprobamos si existe el artículo. Si no existe, lanzamos un error 404, con la función show_404() (aun no se ha tratado la gestión de errores). Si existe, llamamos a la vista que debe mostrar el contenido completo del artículo, enviando el array con los datos del artículo encontrado.

Nos fijamos que la vista que solicitamos “muestra_articulo” no ha sido creada todavía.

11.- Creo la vista que muestra el artículo

Para acabar esta etapa de la practica, creamos la vista “muestra_articulo”, que tiene que mostrar el contenido del artículo al usuario.

Selección_095

Ahora podemos comprobar, entrando a la portada del sitio, que los enlaces a los últimos artículos ya están funcionando. Si los pulsamos accederemos a las páginas que acabamos de hacer en esta etapa, en la que se nos muestra el contenido de los artículos.

Si da algún error quitar el sufijo HTML en config

$config[‘url_suffix’] = “”;

Si intentamos acceder a una URL de un artículo que no existe, como:

http://localhost/codeigniter/articulos/muestra/923

Podremos visualizar un error 404 de página no encontrada.

Quizás se pueda pensar que, siguiendo otras costumbres en PHP, se podría haber hecho esta pequeña aplicación en menos tiempo y quizás con menos código fuente. No obstante, a medio plazo se podrá observar los beneficios de codificar por medio de los controladores, vistas y modelos, con los que se obtiene un código más claro, organizado, y con mantenimiento más sencillo, entre diversas ventajas.

Helpers

Los helpers son juegos de funciones, ordenados por temática en diferentes paquetes, que nos ayudan en la realización de tareas habituales en las aplicaciones web. Existen helpers para muchas cosas distintas, como para trabajo con arrays, fechas, cookies, emails, URLs, formularios, etc.

Los helpers están almacenados en el directorio system/helpers o en el directorio application/helpers. Al intentar cargar un helper CodeIgniter mirará si se encuentra primero en application/helpers y si no es así lo buscará en la carpeta system/helpers.

Carga de un helper en CodeIgniter

En CodeIgniter no se carga de manera predeterminada ninguna librería o juego de funciones (salvo algunas librerías muy básicas), para aumentar el rendimiento del sistema, no haciendo procesar a PHP nada que realmente no necesite. Por ello tenemos que cargar los helpers, así como cualquier otra librería explícitamente, ya sea en todas las páginas a través de los archivos de configuración, o en una página en concreto a través de las funciones de carga de helpers.

Una vez un helper ha sido cargado, estará a nuestra disposición en los controladores y vistas, de manera global. Para cargar un helper podemos invocar este código.

$this->load->helper(‘mihelper’);

En el código anterior la cadena “mihelper” corresponde con el nombre del helper que se desea cargar. Este nombre es una palabra como “url”, “file”, etc. y no el propio archivo del código del helper. Por ejemplo con el código:

$this->load->helper(‘url’);

Se está cargando el helper con nombre “url” que realmente está en el archivo “url_helper.php”. Pero para cargarlo simplemente tenemos que indicar el nombre del helper y no el nombre del archivo donde está el helper.

Puedes cargar un helper en cualquier parte del código de tus controladores o incluso de las vistas (aunque no sea una buena práctica cargar helpers en las vistas), siempre y cuando lo cargues antes de utilizarlo. En un controlador podrías cargar el helper en el constructor, con lo que estaría disponible en todas los métodos del mismo, o bien en uno de los métodos donde lo necesites.

Puedes cargar múltiples helpers a través de una única llamada a load().

$this->load->helper( array(‘cookie’, ‘file’, ‘form’) );

Carga automática de helpers

La carga automática nos ahorrará repetir el código de carga de los helpers que deseemos en toda la aplicación y como podremos imaginar, es una buena idea cuando pensamos usar un helper en varios sitios distintos.

El archivo de configuración que tenemos que editar para definir los helpers que deseamos cargar de manera predeterminada es el siguiente:

application/config/autoload.php

Para indicar qué helpers queremos cargar tenemos que editar el array $autoload, en su índice “helpers”, con un código parecido al siguiente:

$autoload[‘helper’] = array(‘url’, ‘file’, ‘cookie’);

Extender helpers en CodeIgniter

Los helpers se pueden extender con nuevas funcionalidades personalizadas por nosotros mismos. Para ello tienes que crear un archivo con el helper modificado con tus propias funciones y colocarlo en el directorio application/helpers y nombrarlo como el helper original pero con el prefijo “MY_”.

En ese archivo modificado del helper podrás añadir las funciones que te hagan falta o incluso modificar el código de las funciones ya existentes en los propios helpers.

Librerías

Las librerías en CodeIgniter son clases de programación orientada a objetos (POO) preparadas para realizar tareas típicas en el desarrollo de páginas web. Implementan clases, de POO, para resolver problemas muchas veces similares a los que resuelven los Helpers, pero son un poco más especializadas en temas particulares. Algunos ejemplos de librerías que se dispone en CodeIgniter son para trabajar con bases de datos, FTP, upload de archivos, sesiones, calendario, etc.

Carga de librerías

Para cargar una library en CodeIgniter tenemos que indicarlo explícitamente, pues en este framework no se carga nada por defecto, salvo contadas excepciones, para optimizar el tiempo de respuesta de PHP al procesar las páginas. Para ello tenemos que invocar el siguiente código:

$this->load->library(‘nombre de la clase’);

Donde ‘nombre de la clase’ es el nombre de la librería, o clase de POO, que queremos cargar.

Realmente todas las librerías no se necesitan cargar, puesto que hay algunas que ya se encuentra por defecto disposición de nuestros scripts, sin tener que cargarlas explícitamente. Esto es porque algunas librerías son fundamentales para el funcionamiento del núcleo de CodeIgniter. Por ejemplo, siempre tendremos disponibles las librerías que implementan las clases de Output, Input o URI.

Por ejemplo, si quisiéramos cargar la librería de Email, que facilita el envío de correos por medio de PHP, tendríamos que utilizar el siguiente código:

$this->load->library(‘email’);

Ya que son clases de POO, una vez cargada tenemos que utilizar sus métodos para poner en marcha sus funcionalidades.

Dentro de los controladores, para acceder a la clase y sus métodos utilizamos el nombre de la clase como una propiedad de $this.

Por ejemplo, en el caso de la librería email, para definir quién envía un correo electrónico utilizamos un código como este:

$this->email->from(‘tu@dominio.com’, ‘Nombre del remitente’);

En la guía de usuario de CodeIgniter existe una referencia completa sobre cada una de las clases y su utilización.

Carga automática de librerías en CodeIgniter

También tenemos la opción de indicar en nuestros archivos de configuración la carga predeterminada de algunas librerías, para que estén disponibles en todas las páginas sin necesidad de cargarlas en los controladores.

Para indicar las librerías que queremos cargar automáticamente tenemos que editar el archivo autoload.php, que está en la ruta:

application/config/autoload.php

En ese archivo encontraremos un array llamado libraries, donde podemos indicar todos los nombres de las librerías a cargar, por ejemplo:

$autoload[‘libraries’] = array(‘database’, ‘session’, ‘form_validation’);

Se puede seguir profundizando desde la documentación del framework

http://ellislab.com/codeigniter/user-guide/

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s