Code Igniter

60
Code Igniter Ene al Cubo - Febrero 2012 [email protected] Saturday, July 27, 13

description

PHP with Code Igniter

Transcript of Code Igniter

Page 1: Code Igniter

Code IgniterEne al Cubo - Febrero 2012

[email protected]

Saturday, July 27, 13

Page 2: Code Igniter

Temario• El concepto MVC

• Requerimientos

• Instalando Code Igniter

• Estructura de directorios

• Flujo de Información

• Coding standard

• Configuración inicial

• Utilizando URL’s y rutas

• Controladores

• Vistas

• Modelos

• Helpers

• Bibliotecas

• Carga automática de recursos

• Bibliotecas propias

• Caché

• Manejo de errores

• Seguridad

Saturday, July 27, 13

Page 3: Code Igniter

El concepto MVC• Modelo / Vista / Controlador

• Concepto introducido por los diseñadores del lenguaje Smaltalk.

• Utilizado generalmente para aplicaciones GUI.

• El concepto principal trata de encapsular o partir una aplicación en tres.

Saturday, July 27, 13

Page 4: Code Igniter

El concepto MVC• Modelo

• Es un objeto que representa datos o actividad.

• Como por ejemplo una tabla de una base de datos, un archivo o algún otro medio que arroje datos almacenados.

• Si llegas a necesitar un modelo con datos no relacionados será necesario dividir este modelo en dos y crear uno diferente.

Saturday, July 27, 13

Page 5: Code Igniter

El concepto MVC• Vista

• Es una forma visual de reflejar el estado del modelo.

• Esta parte es respondable de mapear la visualización a un dispositivo.

• Puede haber mas de una vista relacionada al modelo ya que los estados de este último puede variar.

Saturday, July 27, 13

Page 6: Code Igniter

El concepto MVC• Controlador

• Ofrece la facilidad de cambiar el estado de un modelo.

• Es el enlace entre modelo y vista.

• Acepta datos del usuario e instruye al modelo y a la vista para accionar mecanismos.

• Es responsable de ampear las acciones del usuario a la aplicación.

Saturday, July 27, 13

Page 7: Code Igniter

El concepto MVC

Modelo

Controlador Vista

Saturday, July 27, 13

Page 8: Code Igniter

El concepto MVC• El modelo apunta a la vista con lo cual este envia

pequeños mensajes de cambio de su estado.

• El modelo nunca debe de saber que tipo de vista se utiliza.

• Por otro lado la vista debe de saber que tipo de modelo está observando.

• Así mismo la vista podrá mandar llamar cualquiera de las funciones del modelo por medio del controlador.

• El controlador apunta a las otras dos partes en forma sólida ya que necesita saber el tipo de ambos.

Saturday, July 27, 13

Page 9: Code Igniter

El concepto MVC• Otros conceptos o modelos parecidos al MVC

podemos mencionar al ORM (Object-relational Mapping)

• Así mismo podemos mencionar frameworks de desarrollo web que soportan MVC.

• Code Ingniter

• Cake PHP

• Zend Framework

Saturday, July 27, 13

Page 10: Code Igniter

Code Igniter

• Es un framework muy simplificado para desarrolladores PHP para crear poderosas aplicaciones web.

Saturday, July 27, 13

Page 11: Code Igniter

Code Igniter (CI)• Características

• Alto rendimiento.

• Poca configuración inicial.

• No requiere uso de línea de comandos.

• No tiene reglas restrictivas de codificación.

• No requiere librerías externas como PEAR. Aunque se pueden utilizar.

• No requiere que aprendas lenguaje de templates para generar las vistas. (SMARTY por ejemplo). Aunque lo soporta.

• Documentación simple y clara.

• URL’s limpios

Saturday, July 27, 13

Page 12: Code Igniter

Requerimientos de CI• PHP 4.3.2 en adelante. Con cualquier web server.

• Base de datos para almacenar información.

• MySQL (4.1)

• MS SQL

• Oracle

• Sqlite

• ODBC

Saturday, July 27, 13

Page 13: Code Igniter

Licencia de CI

• Licencia Copyright a nombre de EllisLab Inc.

• Se permite el uso de este producto siempre y cuando:

• Se distribuya una copia de esta licencia. A grandes rasgos. =)

Saturday, July 27, 13

Page 14: Code Igniter

Instalación de CI

• Descargar el archivo de la versión estable del framework del sitio www.codeigniter.com.

• La versión actual es la 2.1.0 ya no soporta PHP 4.x

• La versión que soporta PHP 4.x y 5.x es la 1.7.3

Saturday, July 27, 13

Page 15: Code Igniter

Instalación de CI

• Proceso de instalación.

1. Desempacar el archivo en un directorio que no esté publicado en web.

2. Crear una carpeta en el directorio de su web server (htdocs, www, inetpub, etc).

3. Copiar los archivos del CI en esta carpeta.

Saturday, July 27, 13

Page 16: Code Igniter

Ejercicio #1

1. Instalar CI en su ambiente de desarrollo *AMP

2. Probar la funcionalidad accesando por medio de un browser.

Saturday, July 27, 13

Page 17: Code Igniter

Estructura• system/

• core/

• database/

• fonts/

• helpers

• language/

• libraries/

Saturday, July 27, 13

Page 18: Code Igniter

Estructura• application/

• cache

• config/

• controllers/

• core/

• errors/

• helpers/

• hooks/

• language/

• libraries/

• logs/

• models/

• third_party/

• views/

Saturday, July 27, 13

Page 19: Code Igniter

Estructura• Es posible tener una sola instalación para

diferentes aplicaciones.application/foo/

application/foo/config/

application/foo/controllers/

application/foo/errors/

application/foo/libraries/

application/foo/models/

application/foo/views/

application/bar/

application/bar/config/

application/bar/controllers/

application/bar/errors/

application/bar/libraries/

application/bar/models/

application/bar/views/

Saturday, July 27, 13

Page 20: Code Igniter

Estructura

• Para seleccionar una aplicación en especial es necesario editar el archivo index.php y cambiar la variable $application_folder = “application/foo”.

• Cada una de las aplicaciones necesitará su propio archivo index.php. Este archivo se podrá tener otro nombre.

Saturday, July 27, 13

Page 21: Code Igniter

Flujo de Información

• El archivo index.php inicializa la aplicación.

• El Router analiza el encabezado HTTP para determinar que se hará.

• Si existe cache esta información se envía directamente al browser.

• Luego la información es filtrada por un módulo de seguridad.

• El controlador carga los modelos, bibilotecas, plugins, helpers y cualquier otro recurso que se necesite.

• Al finalizar esto la vista es renderizada y enviada al navegador. Si el cache está activado esta es enviada al cache para respuestas futuras.

Saturday, July 27, 13

Page 22: Code Igniter

Coding Standar• Formato de archivos

• Codificación UTF-8

• Terminación de línea “LF”

• IDE’s

• Notepad - Notepad++

• Textmate

• Aptana - Eclipse

• Dreamweaver

• HTML Kit

Saturday, July 27, 13

Page 23: Code Igniter

Coding Standar• Etiquetas PHP

Incorrecto

<?php

echo “Hola”;

?>

Correcto

<?php

echo “Hola”;

/* End of file myfile.php */

/* Location ./system/modules/mymodule/myfile.php */

Saturday, July 27, 13

Page 24: Code Igniter

Coding Standar• Nombrado de clases

Incorrecto

class superclass

class superClass

Correcto

class Super_class

Saturday, July 27, 13

Page 25: Code Igniter

Coding Standar• Nombrado de métodos

Incorrecto

function propiedadesarchivo()

function propiedadesArchivo()

function getfileproperties()

function getFileProperties()

function get_file_properties_from_the_file()

Saturday, July 27, 13

Page 26: Code Igniter

Coding Standar• Nombrado de métodos

Correcto

function get_file_properties()

Saturday, July 27, 13

Page 27: Code Igniter

Coding Standar• Nombres de variables

Incorrecto

$j = ‘foo’;

$Str

$nombreVariable

$nombrevariable

$nombre_de_variable_muy_largo

Saturday, July 27, 13

Page 28: Code Igniter

Coding Standar• Variables

Correcto

for ($j = 0; $j < 10; $j++)

$str

$buffer

$group_id

$last_city

Saturday, July 27, 13

Page 29: Code Igniter

Coding Standar• Indentación de estructuras

Incorrecto

function myfunct(){

//

}

if ($foo == $bar){

//

}

Saturday, July 27, 13

Page 30: Code Igniter

Coding Standar• Indentación de estructuras

Correcto

function myfunct()

{

//

}

if ($foo == $bar)

{

//

}

Saturday, July 27, 13

Page 31: Code Igniter

Configuración CI

• Existen dos tipos de configuraciones, la simple y la avanzada.

• Configuración Inicial

• Abrir el archivo application/config/config.php

Saturday, July 27, 13

Page 32: Code Igniter

Carga Automática de Recursos

Proyecto

Controlador

Método $this->load dentro del método

$this->load dentro del constructor

config/autoload.php

Saturday, July 27, 13

Page 33: Code Igniter

URL’s limpios• Por default CI está diseñado para que sea amigable con la

lectura de los URL’s tanto para los humanos como para los motores de búsqueda.

example.com/index.php/class/function/ID

1. El primer argumento representa el nombre de la clase del controlador.

2. El segundo reprsenta el nombre del método o de la función

3. El tercero representa el argumento o argumentos a pasar al método o función.

Saturday, July 27, 13

Page 34: Code Igniter

Controladores• Es una clase definida en un archivo la cual es una forma de acceso al URL.

• Se guardan en el directorio controllers

• Ejemplo.

<?php

class Blog extends CI_Controller {

public function index()

{

echo 'Hello World!';

}

}

?>

Saturday, July 27, 13

Page 35: Code Igniter

Controladores

• El nombre de la clase del controlador deberá de empezar con mayúscula.

• Para definir un controlador default hay que configurarlo en el archivo application/config/routes.php

$route['default_controller'] = 'Blog';

Saturday, July 27, 13

Page 36: Code Igniter

Controladores• En algunas ocasiones es necesario crear un método

constructor para cargar algunos recursos al controlador.

  public function __construct()

       {

            parent::__construct();

            // Código fuente

       }

Saturday, July 27, 13

Page 37: Code Igniter

Palabras Reservadas• No llamar a tu controlador como:

• Controller

• CI_Base

• _ci_initialize

• Default

• index

Saturday, July 27, 13

Page 38: Code Igniter

Palabras Reservadas• No llamar las funciones:

• is_really_writable()

• load_class()

• get_config()

• show_error()

• show_404()

• log_message()

• _exeption_handlrer()

• get_instance()

Saturday, July 27, 13

Page 39: Code Igniter

Palabras Reservadas• No llamar variables

• $config

• $mimes

• $lang

Saturday, July 27, 13

Page 40: Code Igniter

Palabras Reservadas• No llamar constantes

• EXT

• FCPATH

• SELF

• BASEPATH

• APPPATH

• CI_VERSION

• FILE_READ_MODE

• FILE_WRITE_MODE

• DIR_READ_MODE

• DIR_WRITE_MODE

• FOPEN_READ

• FOPEN_READ_WRITE

• FOPEN_WRITE_CREATE_DESTRUCTIVE

• FOPEN_READ_WRITE_CREATE_DESTRUCTIVE

Saturday, July 27, 13

Page 41: Code Igniter

Ejercicio #2

1. Generar un controlador llamado “Ejercicio”.

2. En el controlador mandar llamar la función phpinfo().

3. Establecer este controlador como default.

Saturday, July 27, 13

Page 42: Code Igniter

Vistas• Son archivos HTML o fragmentos de código HTML

los cuales son llamados desde el controlador.

• Se guardan en el directorio de views.

• Para cargarlas se utiliza en el controlador:

$this->load->view('vista');

• Las vistas sólo deben de llevar código PHP para desplegar información. Cómo máximo utilizar for o foreach.

Saturday, July 27, 13

Page 43: Code Igniter

Vistas• A las vistas se le podrá pasar información a través de

un arreglo de datos.

$data = array();

$data['titulo'] = 'Hola';

$this->load->view('vista',$data);

• Ya en la vista esta información podrá ser desplegada como una variable PHP

echo $titulo;

Saturday, July 27, 13

Page 44: Code Igniter

Ejercicio #31. Generar una vista llamada vista_ejercicio.php con la mínima

estructura de un archivo HTML.

2. Mandar llamar la vista desde el controlador.

3. Generar la siguiente información en un arreglo dentro del controlador.

1. titulo

2. header

3. cuerpo

4. footer

4. Pasar esta información a la vista y desplegarla en la misma.

Saturday, July 27, 13

Page 45: Code Igniter

Modelos• Son clases que están diseñadas para trabajar con la información de tu base de datos.

• Se almacenan dentro del directorio models/

• La clase deberá de empezar con letra mayúscula y el archivo deberá de llamarse en minúsculas con el nombre de la clase blog_model.php

<?php

class Blog extends CI_Model{

public function __construct()

{

parent::__construct();

}

}

?>

Saturday, July 27, 13

Page 46: Code Igniter

Modelos• Para cargar un modelo dentro del controlador

se utiliza la siguiente instrucción.

$this->load->model('Blog');

• Una vez cargado podrá ser utilizado de la siguiente mantera en el controlador

$this->Blog->funcion

Saturday, July 27, 13

Page 47: Code Igniter

Ejercicio #41. Generar una base de datos en MySQL llamada

n3_ejercicio.

2. Generar un usuario con los privilegios para poder utilizar la base de datos creada en el paso anterior.

3. Generar una tabla llamada test con la siguiente estructura:

1. id - int - not null - primary key - ai

2. columna1 - varchar(255)

3. columna2 - int

4. columna3 - float

Saturday, July 27, 13

Page 48: Code Igniter

Ejercicio #44. Crear un modelo llamado “Ejercicio”.

5. Crear un método el cual obtenga toda la información de la tabla “test”.

6. Crear un método al cual se le pase un parámetro en el que se defina el id del registro que se quiere obtener.

7. Crear un método para insertar información en la tabla ”test”.

8. Crear un método para actualizar informaicón en la tabla “test”.

9. Crear un método para eliminar un registro indicado en la tabla “test”.

10. Mandar llamar este modelo desde el controlador.

Saturday, July 27, 13

Page 49: Code Igniter

Helpers• Cómo el nombre lo sugiere, ayudan con tareas.

• Cada helper es una colección de funciones de una categoría en particular.

• Para cargar helpers usamos.

$this->load->helper('name');

Saturday, July 27, 13

Page 50: Code Igniter

Helpers• Ya que el helper es cargado. La función o

funciones que estén definidas dentro de este se utilizan como cualquier otra función de PHP.

funcion_de_helper(par1,par2);

Saturday, July 27, 13

Page 51: Code Igniter

Librerias de CI• Están localizadas en el directorio system/libraries.

• Se utilizan desde un controlador.

$this->load->library('class name');

$this->load->library(array('class1', 'class2'));

• Se utilizan de la siguiente manera

$this->class1->método();

$this->class2->método();

Saturday, July 27, 13

Page 52: Code Igniter

Librerías propias• Se pueden crear librerías personales en la carpeta application/libraries.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

    public function __construct($params)

    {

        // Do something with $params

    }

}

?>

Saturday, July 27, 13

Page 53: Code Igniter

Hooks• Son puntos en el flujo de CI los cuales permitirán ejecutar código:

• Antes de que cargue el sistema (pre_system)

• Antes de cargar un controlador (pre_controller)

• Después del constructor de un controlador (post_controller_constructor)

• Después de un controlador (post_controller)

• Durante el despliegue de información (display_override)

• Durante el despliegue de cache (cache_override)

• Después de la ejecución del sistema (post_system)

Saturday, July 27, 13

Page 54: Code Igniter

Hooks• Hay que activarlos en application/config/

config.php

$config['enable_hooks'] = TRUE;

• Son definidos en el archivo application/config/hooks.php

• Y las funciones en application/hooks como una clase com sus respectivos métodos.

Saturday, July 27, 13

Page 55: Code Igniter

Hooks• La definición de un hook se puede ver a continuación.

$hook['pre_controller'] = array(

             'class'    => 'MyClass',

             'function' => 'Myfunction',

             'filename' => 'Myclass.php',

             'filepath' => 'hooks',

             'params'   => array('beer', 'wine', 'snacks')

);

Saturday, July 27, 13

Page 56: Code Igniter

Manejo de errores• Existen funciones en CI para generar errores

y personalizarlos.

• show_error(‘mensaje’,código). Esta función desplegará el archivo application/errors/error_general.php

Saturday, July 27, 13

Page 57: Code Igniter

Seguridad• Por default CI restringer en sus URL’s los siguientes

caracteres.

• Texto alfanumérico

• Tilde ~

• Punto .

• Dos puntos :

• Guión bajo _

• Guión -

Saturday, July 27, 13

Page 58: Code Igniter

Seguridad• Antes de aceptar información en tu aplicación

será necesario.

• Filtrar los datos obtenidos

• Validar los datos asegurándonos que es el tipo correcto de dato, longitud, tamaño, etc.

• Escapar todos los datos antes de insertarlos en la base de datos.

Saturday, July 27, 13

Page 59: Code Igniter

Ejercicio #51. Generar un método en el modelo de la tabla codeigniter

a el cual se le pasen tres parámetros.

• Primer parámetro: campo a actualizar

• Segundo parámetro: valor

• Tercer parámetro: id o llave

2. Estos parámetros serán enviados al modelo edsde el controlador.

3. Así mismo estos parámetros se harán llegar al controlador por medio del método GET

Saturday, July 27, 13

Page 60: Code Igniter

Ejercicio #6

1. Generar una tabla nueva en MySQL con 2 columnas ya gregar 100 registros en contenido.

2. Aplicar un paginador de 20 renglones por página.

Saturday, July 27, 13