SlideShare une entreprise Scribd logo
1  sur  76
Télécharger pour lire hors ligne
Desarrollo web con CodeIgniter




          José Argudo Blanco
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
¿Que vamos a ver?

●   Que es CodeIgniter, ventajas y utilidades
●   Ejemplos de código
●   Ejemplos con SmartClient JavaScript
●   Comentarios y preguntas
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.
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.
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.
CI introducción

                  ●   Dentro de
                      “application”
                      encontraremos:
                          –   config →
                                configuración del
                                framework
                          –   controllers
                          –   models
                          –   views
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
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
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.
CI introducción

                  ●   Configuración del
                      controlador por defecto
                      en application →
                      config → routes.php
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.
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.
CI introducción, MVC

●   A continuación podemos ver un ejemplo de
    controlador:
        –   Necesario extender a la clase CI_Controller
CI introducción, MVC
●   En la siguiente imagen podemos ver un ejemplo de
    vista. Con uso de la clase Session de CI
CI introducción, MVC
●   Ejemplo de modelo, extiende a la clase CI_Model
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.
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:
CI Active Record
CI Active Record

●   En la consulta SQL anterior encontramos:
        –   Select
        –   From
        –   Where
        –   Order
        –   Limit
●   ¿Como podemos traducirlo a la clase Active
    Record de CodeIgniter? ...
CI Active Record
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...
CI Active Record
CI Active Record
●   Veamos ahora un ejemplo de inserción:
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
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
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
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
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
CI Active Record
●   Posibilidad de inserciones en batch:
        –   $this->db->insert_batch();
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
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.
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
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.
CI Form Helper
●   El formulario anterior se podría traducir en el
    siguiente código HTML:
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:
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:
CI Form Validation
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
CI Form Validation
●   Si queremos que se mantengan los datos en los
    campos, entre validaciones, podremos usar:
        –   set_value('nombre_del_campo');
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.
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
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?
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...
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.
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
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:
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
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
CI Language Class
●   Por ejemplo en algunas webs he utilizado la carga
    del fichero de idioma de la siguiente forma:
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
CI Language Class

●   Para mostrar cada línea traducida utilizaremos
    $this->lang->line('indice_array_lang');
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.
CI Language Class

                    ●   Aquí vemos un
                        ejemplo de
                        controlador que se
                        puede utilizar para
                        cambiar de idioma
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.
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...
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.
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...
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
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
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!
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
        –   ...
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
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.
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
CI, extendiendo CodeIgniter
●   Esta nueva clase extenderá a CI_Controller, y
    tendrá en su constructor una llamada al
    constructor de la clase padre
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
CI, extendiendo CodeIgniter
●   Otra de las características que podemos transportar
    a una clase padre sería el generador de paginación.
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...
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
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.
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
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 ...
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.
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
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!

Contenu connexe

Tendances

Tema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basicTema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basic
aristeo23
 

Tendances (20)

UDA-Plugin UDA. Guia de desarrollo
UDA-Plugin UDA. Guia de desarrolloUDA-Plugin UDA. Guia de desarrollo
UDA-Plugin UDA. Guia de desarrollo
 
Asp.net
Asp.netAsp.net
Asp.net
 
Programacion
ProgramacionProgramacion
Programacion
 
MVC en CakePHP 2.0
MVC en CakePHP 2.0MVC en CakePHP 2.0
MVC en CakePHP 2.0
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
 
Visual basic 6.0
Visual basic 6.0 Visual basic 6.0
Visual basic 6.0
 
Asp.net
Asp.netAsp.net
Asp.net
 
ASP.NET
ASP.NETASP.NET
ASP.NET
 
Asp.net mvc
Asp.net mvcAsp.net mvc
Asp.net mvc
 
Trabajo programacion jose (1)
Trabajo programacion jose (1)Trabajo programacion jose (1)
Trabajo programacion jose (1)
 
Trabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NETTrabajar con bases de datos desde ASP.NET
Trabajar con bases de datos desde ASP.NET
 
Tema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basicTema 1 introduccion a la programacion en visual basic
Tema 1 introduccion a la programacion en visual basic
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Intro a ASP.NET
Intro a ASP.NETIntro a ASP.NET
Intro a ASP.NET
 
Metadata api en apex
Metadata api en apexMetadata api en apex
Metadata api en apex
 
Manual desarrollo de aplicaciones web ii
Manual desarrollo de aplicaciones web iiManual desarrollo de aplicaciones web ii
Manual desarrollo de aplicaciones web ii
 
Visual basic .NET
Visual basic .NETVisual basic .NET
Visual basic .NET
 
Tutorial de cakePHP itst
Tutorial de cakePHP itstTutorial de cakePHP itst
Tutorial de cakePHP itst
 
Introducción a Cake PHP Framework
Introducción a Cake PHP FrameworkIntroducción a Cake PHP Framework
Introducción a Cake PHP Framework
 
CakePHP
CakePHPCakePHP
CakePHP
 

Similaire à Taller Codeigniter

Unidad 2.2 Escribiendo El Programa
Unidad 2.2 Escribiendo El ProgramaUnidad 2.2 Escribiendo El Programa
Unidad 2.2 Escribiendo El Programa
Sergio Sanchez
 

Similaire à Taller Codeigniter (20)

API REST FOR THE BD2 DATABASE WITHIN THE IBM I SYSTEMS, USING THE PHP FRAMEWO...
API REST FOR THE BD2 DATABASE WITHIN THE IBM I SYSTEMS, USING THE PHP FRAMEWO...API REST FOR THE BD2 DATABASE WITHIN THE IBM I SYSTEMS, USING THE PHP FRAMEWO...
API REST FOR THE BD2 DATABASE WITHIN THE IBM I SYSTEMS, USING THE PHP FRAMEWO...
 
Integrando AngularJS y drupal
Integrando AngularJS y drupalIntegrando AngularJS y drupal
Integrando AngularJS y drupal
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
Python Gae django
Python Gae djangoPython Gae django
Python Gae django
 
Derribando la torre de marfil - Plain Concepts Dev Day
Derribando la torre de marfil - Plain Concepts Dev DayDerribando la torre de marfil - Plain Concepts Dev Day
Derribando la torre de marfil - Plain Concepts Dev Day
 
Seguridad en las apis desde un punto de vista de developer
Seguridad en las apis desde un punto de vista de developerSeguridad en las apis desde un punto de vista de developer
Seguridad en las apis desde un punto de vista de developer
 
Cocomo II
Cocomo IICocomo II
Cocomo II
 
Guia para el diseño modular de sistemas
Guia para el diseño modular de sistemasGuia para el diseño modular de sistemas
Guia para el diseño modular de sistemas
 
Integración Continua con Gitlab + Fastlane
Integración Continua con Gitlab + FastlaneIntegración Continua con Gitlab + Fastlane
Integración Continua con Gitlab + Fastlane
 
"Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore""Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore"
 
AOP - OSUM springperu(1era Reunion)
AOP - OSUM springperu(1era Reunion)AOP - OSUM springperu(1era Reunion)
AOP - OSUM springperu(1era Reunion)
 
Introduccion a SSIS con BIML
Introduccion a SSIS con BIMLIntroduccion a SSIS con BIML
Introduccion a SSIS con BIML
 
GraphQL Reactivo
GraphQL ReactivoGraphQL Reactivo
GraphQL Reactivo
 
Pipelines as code with Drone
Pipelines as code with DronePipelines as code with Drone
Pipelines as code with Drone
 
Uso de Librerías Objective-c en Xamarin.iOS
Uso de Librerías Objective-c en Xamarin.iOSUso de Librerías Objective-c en Xamarin.iOS
Uso de Librerías Objective-c en Xamarin.iOS
 
Comenzando a usar el Continuous Delivery
 Comenzando a usar el Continuous Delivery Comenzando a usar el Continuous Delivery
Comenzando a usar el Continuous Delivery
 
Actividad 4
Actividad 4Actividad 4
Actividad 4
 
Desymfony - Servicios
Desymfony  - ServiciosDesymfony  - Servicios
Desymfony - Servicios
 
Unidad 2.2 Escribiendo El Programa
Unidad 2.2 Escribiendo El ProgramaUnidad 2.2 Escribiendo El Programa
Unidad 2.2 Escribiendo El Programa
 
Cherokee presentacion
Cherokee presentacionCherokee presentacion
Cherokee presentacion
 

Plus de betabeers

Plus de betabeers (20)

IONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformaIONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataforma
 
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
 
Blockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar LageBlockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar Lage
 
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica MediavillaCloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito -  Jon Torrado - Betabeers BilbaoLa línea recta hacia el éxito -  Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
 
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
 
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
 
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)
 
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
 
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
 
Elemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de UsoElemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de Uso
 
Seguridad en tu startup
Seguridad en tu startupSeguridad en tu startup
Seguridad en tu startup
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
 
Buenas prácticas para la optimización web
Buenas prácticas para la optimización webBuenas prácticas para la optimización web
Buenas prácticas para la optimización web
 
La magia de Scrum
La magia de ScrumLa magia de Scrum
La magia de Scrum
 
Programador++ por @wottam
Programador++ por @wottamProgramador++ por @wottam
Programador++ por @wottam
 
RaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTRaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoT
 
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
 

Taller Codeigniter

  • 1. Desarrollo web con CodeIgniter José Argudo Blanco
  • 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
  • 16. CI introducción, MVC ● Ejemplo de modelo, extiende a la clase CI_Model
  • 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...
  • 24. CI Active Record ● Veamos ahora un ejemplo de inserción:
  • 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!