Este documento presenta una introducción al desarrollo web con CodeIgniter, un framework PHP ligero y flexible. Se explican conceptos clave como MVC, Active Record, helpers como el Form Helper y la Form Validation Class, la clase Language para internacionalización y la clase Email. También se muestran ejemplos de código para realizar tareas comunes como consultas a bases de datos, formularios y envío de correos electrónicos. Finalmente, se explica cómo extender el framework creando clases personalizadas.
2. Un poco de información sobre mi:
● Actualmente trabajando en consultorpc.com
● Twitter: @jose_argudo
● Email: jose@joseargudo.com
● Email: jose@consultorpc.com
● Web: joseargudo.com
3. ¿Que vamos a ver?
● Que es CodeIgniter, ventajas y utilidades
● Ejemplos de código
● Ejemplos con SmartClient JavaScript
● Comentarios y preguntas
4. CI introducción
● Fácil aprendizaje, prácticamente descargar y
empezar a programar.
● Facilita la cohesión y homogeneización del
código de nuestra aplicación. Expecialmente en
grupos de trabajo.
● Proporciona clases y helpers ya existentes que
podemos utilizar directamente en nuestra
aplicación.
5. CI introducción
● Con CodeIgniter podemos generar URLs
amigables:
– http://local.kumbba.com/graficas/ver/1
● Podemos ampliarlo con nuestras propias clases,
helpers etc
● La documentación de CodeIgniter es muy buena, y
el propio framework tiene una curva de
aprendizaje muy suave.
6. CI introducción
● Separación entre
nuestro código
“application” y el
framework “system”
facilitando la
actualización del
framework sin afectar
a nuestro código.
7. CI introducción
● Dentro de
“application”
encontraremos:
– config →
configuración del
framework
– controllers
– models
– views
8. CI introducción
● Rápida configuración
de la aplicación desde
el fichero application
→ config →
config.php
● Parámetro
indispensable
'base_url' que se
utilizará en toda la
aplicación
9. CI introducción
● Posibilidad de definir
que librerías auto-
cargar desde el fichero
application → config
→ autoload.php
● Nos permite mejorar el
rendimiento de nuestra
aplicación cargando
solo lo que vamos a
necesitar
10. CI introducción
● Versátil configuración
de acceso a la base de
datos a través de un
array.
● Posibilidad de definir
múltiples
configuraciones
pudiendo cambiar de
una a otra con solo
modificar el grupo
activo.
11. CI introducción
● Configuración del
controlador por defecto
en application →
config → routes.php
12. CI introducción, MVC
● Uso del patrón de diseño MVC ( Modelo – Vista –
Controlador )
– Modelo: representa estructuras de datos,
comúnmente será una tabla de una base de datos,
pero podría ser un fichero XML, un fichero de
texto, web service etc
– Vista: aquí es donde se muestran los datos
recogidos en el modelo, ya sea en html, pdf etc
En CodeIgniter un fichero de vista puede
representar un fragmento (cabecera, pie) lo que
en ZF haríamos con Layouts / Partials … es más
simple.
13. CI introducción, MVC
● Controlador: sirve de intermediario entre la
petición y los modelos, vistas etc
● NOTA: CodeIgniter no obliga a tener modelos,
aunque lógicamente es más beneficioso utilizarlos
que no hacerlo.
14. CI introducción, MVC
● A continuación podemos ver un ejemplo de
controlador:
– Necesario extender a la clase CI_Controller
15. CI introducción, MVC
● En la siguiente imagen podemos ver un ejemplo de
vista. Con uso de la clase Session de CI
17. CI Active Record
● Clase Active Record que nos permitirá:
– Seleccionar datos
– Insertar
– Actualizar
– Eliminar
● Todo ello sin utilizar SQL = Mayor portabilidad
de nuestro sitio a otros gestores de bases de datos.
18. CI Active Record
● A diferencia de otros frameworks, por ejemplo ZF
no se requiere una clase que represente a cada
tabla de la base de datos. Se pierde potencia pero
se gana simplicidad.
● Veamos un ejemplo, una consulta SQL normal y
corriente:
20. CI Active Record
● En la consulta SQL anterior encontramos:
– Select
– From
– Where
– Order
– Limit
● ¿Como podemos traducirlo a la clase Active
Record de CodeIgniter? ...
22. CI Active Record
● Como hemos podido ver es muy sencillo trasladar
nuestras consultas a la clase Active Record de
CodeIgniter.
● Evitamos tener código SQL mezclado con nuestro
código PHP, personalmente lo prefiero por que así
solo tenemos código PHP en el fichero, lo
encuentro más legible.
● Si disponemos de PHP 5 podemos concatenar los
métodos y nuestra consulta quedaría...
25. CI Active Record
● Vamos ahora a ver el
ejemplo paso a paso.
Imaginemos que
accedemos a la
siguiente URL:
● http://local.kumbba.co
m/unirse.html
26. CI Active Record
● Este formulario debe
crear un nuevo registro
en la tabla usuarios de
nuestra aplicación.
● Esta tabla contiene tres
campos:
– id: autonumérico
– nombre
– pass
27. CI Active Record
● El formulario, en html tiene 3 inputs:
– Uno tipo text, de name nombre
– Otro tipo text, de name pass
– Otro tipo submit, de name enviar
● El action dirigirá la petición a controller unirse
método index
28. CI Active Record
● Aquí vemos el método index del controlador
unirse (ejemplo):
– Primero comprobamos que estemos enviando el
formulario.
– Después comprobamos los campos requeridos
– Por último llamamos al método insertar del
modelo
29. CI Active Record
● Veamos ahora un ejemplo básico de la
documentación de CI:
– Los valores se pasan en formato array
– Todos los valores se escapan automáticamente para
que las consultas sean más seguras
30. CI Active Record
● Posibilidad de inserciones en batch:
– $this->db->insert_batch();
31. CI Active Record
● El proceso de actualización de un registro
también es muy sencillo. Basta con añadir una
clausula where, con el id del registro
32. CI Active Record
● Por último vemos un
ejemplo de eliminación
de registro. Es similar
al método update,
debemos pasarle un id
de registro.
33. CI Active Record
● Podemos ver más ejemplos y muchos más
métodos en la siguiente URL:
– http://codeigniter.com/user_guide/database/active_
record.html
34. CI Form Helper
● Uno de los helpers que
yo considero más útiles
e interesantes.
● Muy práctico usarlo
junto a la Form
Validation Class
● Veamos un ejemplo
con el formulario de la
imagen de la izquierda.
35. CI Form Helper
● El formulario anterior se podría traducir en el
siguiente código HTML:
36. CI Form Helper
● El código anterior podría transformarse en el
siguiente código que utiliza el Form Helper de
CodeIgniter. Este código lo encontrariamos en
un fichero de vista:
37. CI Form Validation
● Ahora vamos a utilizar
la clase Form
Validation para validar
nuestro formulario.
● El primer paso es
añadir una forma de
mostrar los errores.
● Después en nuestro
controlador tendremos:
39. CI Form Validation
● El primer paso es cargar la librería
form_validation
● El segundo paso es definir las reglas de validación
– form_validation->set_rules
● El tercer paso es ejecutar la validación (devuelve
TRUE o FALSE):
– form_validation->run()
● NOTA: si no añadimos ninguna regla la validación
siempre devuelve FALSE
40. CI Form Validation
● Si queremos que se mantengan los datos en los
campos, entre validaciones, podremos usar:
– set_value('nombre_del_campo');
41. CI Form Validation
● En la imagen podemos
ver como se muestran
los mensajes de error.
● Ahora lo interesante
sería poder cambiar
este mensaje, veamos
como en la siguiente
diapositiva.
42. CI Form Validation
● La forma de modificar estos mensajes es
utilizando el método set_message, contando que:
– Hemos de indicar en el primer parámetro la regla
objetivo.
– Podemos utilizar %s para sustituir el nombre
indicado en la regla
43. CI Form Validation
● Aquí vemos como ha
surtido efecto el
cambio del mensaje.
● ¿Como haríamos para
mostrar el error junto
al campo que lo ha
producido?
44. CI Form Validation
● Eliminamos el método
que teníamos para
eliminar errores en la
parte superior y
añadimos, después de
cada campo el método
form_error('nombre_de
l_campo');
● Podemos también
añadir estilos...
45. CI Form Validation
● En el segundo y tercer parámetro del método
form_error añadiremos el código HTML que
queramos que se muestre antes y después del
mensaje de error.
46. CI Form Validation
● En la siguiente página podemos ver las reglas de
validación que vienen predefinidas:
● codeigniter.com/user_guide/libraries/form_validati
on.html#rulereference
● También podemos utilizar nuestras propias
funciones:
– $this->form_validation->set_rules('username',
'Username', 'callback_username_check');
– Deberíamos crear una función username_check
47. CI Language Class
● Otra de las funcionalidades más útiles de
CodeIgniter es la librería Language Class que nos
permite realizar sitios web en varios idiomas de
forma rápida y sencilla.
● No es tan potente como otros frameworks
(Localization en ZF)
● Veamos unos pasos de ejemplo muy básicos para
utilizar esta clases de idioma:
48. CI Language Class
● Lo primero será crear
las carpetas necesarias
para cada idioma.
● Estas carpetas las
crearemos dentro de la
carpeta language
● Dentro de las carpetas
crearemos los ficheros:
englishtextosweb_lan
g.php
49. CI Language Class
● Dentro del fichero
encontramos un array
$lang donde cada
elemento es una
traducción. Tenemos
por un lado el índice
del array y por otro
lado el valor.
● El segundo paso es
cargar el fichero de
idioma
50. CI Language Class
● Por ejemplo en algunas webs he utilizado la carga
del fichero de idioma de la siguiente forma:
51. CI Language Class
● Primero iniciamos la sesión
● Luego comprobamos si tenemos el idioma
definido en la sesión, en caso contrario lo
iniciamos al idioma que deseemos por defecto.
● Definimos un sufijo de idioma, que nos servirá
para los campos de la base de datos
● Cargamos el fichero de idioma con $this->lang-
>load
52. CI Language Class
● Para mostrar cada línea traducida utilizaremos
$this->lang->line('indice_array_lang');
53. CI Language Class
● En el siguiente código podemos ver como usar el
sufijo de idiomas para obtener de la base de datos
el campo deseado.
54. CI Language Class
● Aquí vemos un
ejemplo de
controlador que se
puede utilizar para
cambiar de idioma
55. CI Language Class
● Al finalizar el cambio
de idioma en el
controlador realizamos
una redirección a la
misma página, que
veremos traducida
debido al cambio de
idioma.
56. CI Language Class
● Antes hemos visto como podemos definir reglas
de validación en un formulario con set_rules
● Por ejemplo tenemos la siguiente regla:
– $this->form_validation->set_rules('nombre',
'nombre', 'required');
● En este caso, ¿Como traduciriamos el nombre del
campo que aparecerá en el error?
● Veamoslo...
57. CI Language Class
● En la misma definición de la regla, usaremos el
parámetro lang: y después el nombre del indice
del array $lang de nuestros ficheros de idioma.
58. CI Email Class
● Otra de las clases de CodeIgniter que utilizaremos
más a menudo es la clase de email.
● La podemos ver aquí:
● codeigniter.com/user_guide/libraries/email.html
● Veamos un ejemplo de uso...
59. CI Email Class
● Personalmente me
gusta separar los
métodos encargados de
enviar emails en su
propio modelo.
● Podemos establecer la
carga de este modelo
en el constructor del
controlador
60. CI Email Class
● Una vez tenemos el modulo cargado podemos usar
sus métodos normalmente.
● También vemos como usamos la clase session para
establecer un mensaje flashdata, que solo permanece
durante una petición
● Después efectuamos una redirección
61. CI Email Class
● En el modelo lo único que tenemos que hacer es
cargar la librería email, establecer el from, el to,
subject, mensaje y enviar. ¡Listo!
62. CI Email Class
● La clase cuenta con muchas opciones, entre ellas:
– Adjuntar ficheros
– Enviar email en texto plano o html
– CC y BCC
– Uso de SMTP
– ...
63. CI, extendiendo CodeIgniter
● Vamos a ver ahora como extender CI de forma
fácil.
● Por ejemplo, veamos como extender al controlador
de base.
● Al principio vimos que nuestros controladores
extendian siempre al CI_Controller de la siguiente
forma:
– class Home extends CI_Controller
64. CI, extendiendo CodeIgniter
● Esto es útil si vemos
que un método o
código se repite entre
varios controladores,
podemos extraerlo a
una clase superior. Por
ejemplo en mis
controladores repetía
mucho la carga de las
vistas cabecera y pie.
65. CI, extendiendo CodeIgniter
● Resumí todas estas
peticiones en una
llamada a un método
protegido _render
heredado de una nueva
clase.
● Esta nueva clase la
crearemos en
application → core
66. CI, extendiendo CodeIgniter
● Esta nueva clase extenderá a CI_Controller, y
tendrá en su constructor una llamada al
constructor de la clase padre
67. CI, extendiendo CodeIgniter
● Luego podemos definir los métodos que deseemos,
y que luego las clases hijas podrán utilizar. En vez
de extender a CI_Controller nuestros controladores
extenderán nuestra nueva clase
68. CI, extendiendo CodeIgniter
● Otra de las características que podemos transportar
a una clase padre sería el generador de paginación.
69. CI, extendiendo CodeIgniter
● La clase de paginación es muy utilizada en
prácticamente todos los proyectos.
● En su forma más reducida son unas 8 líneas de
código, que prácticamente siempre será el mismo.
Por lo tanto es un buen candidato a ser extraído a
la clase padre.
● Los parametros son base_url, total_rows,
uri_segment, per_page, first_link, last_link
● En la ayuda de CI hay muchas más opciones...
70. CI, extendiendo CodeIgniter
● Después desde cualquier controlador que herede
de nuestro controlador padre podemos llamar al
método paginate, indicando los parámetros
necesarios
71. CI sugerencia para mejorar la
seguridad de nuestro sitio
● En el fichero
index.php, podemos
modificar dos variables
que indican donde
están nuestra carpeta
system y application.
● Moviendo estas
carpetas fuera del
webroot del servidor
evitaría el acceso
directo por web.
72. CI, ahora que estamos en
index.php
● No olvidemos que aquí
se configura el
“ambiente” de la
aplicación.
● A veces se olvida por
que index.php no se
suele tocar
73. CI, pequeñas cosas muy útiles
● Podemos llamar al método base_url() gracias al
herlper URL.
● Esto es útil en imágenes, ficheros JavaScript etc a
la hora de mover el sitio de un servidor a otro ...
74. CI, pequeñas cosas muy útiles
● Otro método disponible sería site_url, que no solo
devuelve la base_url, más los segmentos indicados
como parámetros, sino que además añade el sufijo
que hayamos definido en nuestra configuración.
75. CI, pequeñas cosas muy útiles
● Anchor crea un elemento <a> con tres
parámetros, segmentos, texto y atributos
● uri_string() devuelve el segmento URI de la
URL actual. Muy útil junto a la clase de cambio
de idioma que comentábamos hace algunas
diapositivas
76. CI, hasta pronto
● Por supuesto nos dejamos muchas más cosas. Pero
espero haberos animado a utilizar CodeIgniter, y si
ya lo hacíais, espero haberos descubierto algún
truquito más.
¡Hasta pronto!