Manual Codeigniter Basico

36
CodeIgniter 1.7 Básico “Manual del participante” Programa: Programa Integral para el Desarrollo del Servidor Público Competencia: Orientación al Servicio Curso: CodeIgniter 1.7 Básico Instructora: MTI. Edmundo Pérez Castrejón Duración:

Transcript of Manual Codeigniter Basico

Page 1: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

“Manual del participante”

Programa:Programa Integral para el Desarrollo del

Servidor Público

Competencia:Orientación al Servicio

Curso:CodeIgniter 1.7 Básico

Instructora:MTI. Edmundo Pérez Castrejón

Duración:12 horas

Diciembre 2010

Page 2: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Índice de contenidoQué es un framework...................................................................................................................3Principales frameworks para PHP...............................................................................................4Descarga e instalacion de CodeIgniter 1.7..................................................................................7

Ejercicio 1: Descargar y probar la instalación de CodeIgniter..........................................7Introduccion al MVC...................................................................................................................8

Modelos..............................................................................................................................8Carga de modelos...............................................................................................................8Conexión automática a la base de datos.............................................................................8

Controladores.....................................................................................................................9Controlador por default......................................................................................................9

Vistas..................................................................................................................................9Hola mundo......................................................................................................................10

Ejercicio 2: Crear la aplicación mas simple y básica: “Hola Mundo........................................10Carga automática de recursos....................................................................................................11Guía de estilo PHP.....................................................................................................................11Helpers, Plugins y Librerías......................................................................................................12Librerias, para que sirven?.........................................................................................................14Benchmarking............................................................................................................................14Input and security......................................................................................................................15EMail.........................................................................................................................................17

Práctica: Formulario de contácto.....................................................................................17File Upload................................................................................................................................18

Práctica: Formulario para envio de archivos....................................................................18Manipulación de imágenes........................................................................................................19

Práctica: Manipulación de imagen...................................................................................20Paginación.................................................................................................................................21Sesiones.....................................................................................................................................22

Agregando datos a la sesión.............................................................................................22Recuperando datos de sesión...........................................................................................23

Flash Data.........................................................................................................................23Validación de formas.................................................................................................................24

Estableciendo reglas.........................................................................................................24Proceso de validación.......................................................................................................24

Interacción con la base de datos................................................................................................26Active Record...................................................................................................................27

Bibliografía................................................................................................................................28

Page 3: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Qué es un framework

En el desarrollo de software, un framework es una estructura conceptual y tecnológica de soporte definida, normalmente con artefactos o módulos de software concretos, con base en la cual otro proyecto de software puede ser organizado y desarrollado. Típicamente, puede incluir soporte de programas, bibliotecas y un lenguaje interpretado entre otros programas para ayudar a desarrollar y unir los diferentes componentes de un proyecto.

Son diseñados con la intención de facilitar el desarrollo de software, permitiendo a los diseñadores y programadores pasar más tiempo identificando requerimientos de software que tratando con los tediosos detalles de bajo nivel de proveer un sistema funcional.

Page 4: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Principales frameworks para PHP

Zend Framework

Probablemente, el framework más conocido, y el más utilizado profesionalmente.

Es muy desacoplado, por lo que mucha gente lo considera una librería de componentes más que un framework. Por otra parte, gracias a esto, podemos utilizarlo en conjunto con otros frameworks.

Tiene detrás a Zend, una de las empresas más importantes de la comunidad PHP, y gran contribuidora a su código desde sus primeras versiones.

Siempre ha habido quejas sobre su curva de aprendizaje y el tiempo necesario para comenzar un nuevo proyecto, aunque eso mejoró un poco con los componentes RAD (Rapid Application Development).

Recomendado para proyectos grandes.

Zymphony

El framework que suele utilizar Yahoo, por ejemplo. Bastante popular hoy en día.

Más complejo y elegante que CakePHP y CodeIgniter, pero menos que Zend.

Muy completo.

El “azúcar sintáctico” y la generación de código ayuda a recortar el tiempo de desarrollo.

Recomendado para cualquier tipo de proyecto, en ocasiones combinado con algún componente de Zend.

CakePHP

Toma muchas de sus ideas de Ruby on Rails, por lo que gustará especialmente a los fans de la autoconfiguración y de lo “mágico”.

Page 5: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Debido a esto, no es lo más adecuado para aquellos que quieran tener un mayor control.

En su tiempo tenía fama de tener muy mala documentación. Hoy en día eso ha cambiado.

Recomendado para proyectos no demasiado complejos, en ocasiones combinado con algún componente de Zend.

Page 6: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

CodeIgniter

Probablemente, el menos popular de los cuatro.

Muy flexible y sencillo. A menudo demasiado, obligando al programador a desarrollar muchas funcionalidades que deberían incluirse por defecto.

Muy fácil de aprender, principalmente porque no hay mucho que aprender, al ser simple hasta el extremo.

También es el que menos recursos utiliza, al ser el más ligero.

Está escrito para mantener la compatibilidad con PHP 4, por lo que no aprovecha muchas de las características introducidas en PHP 5. Debido a esta y a otras razones muchos de sus desarrolladores se desvincularon del proyecto para crear un fork llamado Kohana.

Recomendable como framework de iniciación, si el resto intimidan demasiado; o para aquellos a los que realmente no les gusten los frameworks.

Page 7: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Descarga e instalación de CodeIgniter 1.7

Se asume conocimiento previo de programación en PHP, así como también se asume que existe un servidor web (apache) donde esta configurado el php.

Acceder a la siguiente dirección: http://www.codeigniter.com

Para descargar los archivos hacemos clic en el botón Download CodeIgniter , los archivos del framework miden aproximadamente 2.1 Mb. No deberá tomar mucho tiempo su descarga.

Una vez descargado el archivo CodeIgniter_1.7.2.zip tenemos que descomprimir los contenidos en nuestra carpeta de www dentro de una carpeta que llamaremos sandbox.

Listo, ahora tenemos 'instalado' el framework, si accedemos a la dirección:

http://localhost/sandbox/index.php/welcome

Podemos visualizar el mensaje de bienvenida:

Ejercicio 1:

Descargar y probar la instalación de CodeIgniter

Page 8: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Introduccion al MVC

Cuando hablamos de MVC nos estamos refiriendo a Modelo Vista Controlado un patrón de diseño del que ya habíamos hablado anteriormente. Se trata básicamente de dividir el desarrollo de una aplicación (en nuestro caso Web) en 3 segmentos, el modelo, el controlador y la vista. Todo en pro de del orden y la reutilización de código.

Modelos: Capa de abstracción de datos

El modelo representa cualquier tipo de datos que vayamos a utilizar en nuestra aplicación, estos datos pueden provenir de una base de datos, un archivo de texto, RSS Feeds, Api calls, etc.

La aplicación de MVC en CodeIgniter es bastante flexible, tan es así que el modelo no es forzosamente requerido. El modelo no esta atado a una base de datos a diferencia de otros frameworks como Ruby on Rails.

Carga de modelos

Los modelos se cargan desde los controlador, para cargar un modelo basta con una sola linea de código: $this->load->model('model_name');

Una vez que el modelo ha sido cargado dentro de nuestro controlador, podemos tener acceso a sus métodos a traves de la siguiente sintaxis:

$this->model_name->algun_metodo();

También es posible hacer la carga del modelo y renombrarlo para su uso, ejemplo: $this->load->model('model_name','modelo_base') , entonces referiremos al modelo de nombre model_name como modelo_base dentro de el controlador que le contiene.

Conexión automática a la base de datos

Cuando un modelo se carga, este no se conecta automáticamente a la base de datos, a menos claro, que se haya especificado el autoload para la clase de base de datos.

Si pasamos un valor TRUE como tercer parámetro a la carga de un modelo, este conectará automáticamente a la base de datos que hayamos configurado en el archivo /system/application/config/database.php

Page 9: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Controladores: La lógica del negocio

En este segmento es donde se define la lógica de negocios, se trata en realidad de la capa intermedia, donde todos los datos son procesados y pasados a la vista (capa de vista) para su presentación final. Es en el controlador donde toda la magia sucede.

Lo controladores son el centro de la aplicación ya que ellos determinan como se despachan las peticiones HTTP.

Los controladores deberán siempre extender (heredar) de la clase base Controller para poder tener acceso a todos los recursos propios de un controlador de CodeIgniter.

Controlador por default

CodeIgniter tiene la habilidad de definir un Controller por default, este controlador es invocado cuando ningun otro controlador es pasado al index.php

system/application/config/

routes.php

$route['default_controller'] = "welcome";

Vistas

La vista es la información que se presenta al usuario, es la cara de nuestra aplicación, generalmente son archivos HTML (encapsulados en archivos PHP), también podemos incluir programación PHP dentro de las vistas, pero no debemos de perder de vista la separación de capas.

Para cargar una vista, utilizaremos la siguiente sintaxis:

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

Es posible pasar datos a la vista mediante un array, comunmente se utilizará el array data. Ejemplo:

Page 10: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

$data['titulo'] = 'Mi nueva página';

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

Vistas como datos

Esta es una interesante característica que nos permiten las vistas de CodeIgniter, se trata de convertir la vista que sale a pantalla en data, que puede ser almacenada en una variable y ser manipulada como se requiera, por ejemplo guardarla en una base de datos.

Simplemente hay que pasar por tercer parámetro a la carga de una vista, el valor TRUE. Ejemplo:

$acta_nacimiento = $this->load->view('acta_nacim',$data,TRUE);

$this->actas_model->graba_acta($acta_nacimiento);

En el ejemplo anterior, estariamos grabando un snapshot del documento justo como salio a pantalla, es decir, nos permitiría llevar un historia de los documentos que se presentan en pantalla, esto es útil cuando los valores del documento pueden variar con el tiempo y se requiere hacer revisiones históricas del mismo.

Hola mundo

Ejercicio 2: Crear la aplicación mas simple y básica: “Hola Mundo”

Page 11: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Carga automática de recursos

CodeIgniter incorpora una funcionalidad que nos permite cargar librerias, helpers, modelos, etc en cada request que hacemos al sitio web.

Esto resulta bastante útil cuando nuestra aplicación hace uso, por ejemplo de la conexión a la base de datos; podemos entonces, cargar la clase de base de datos y suponer que siempre habra conexión y no necesitaremos cargarla manualmente. Para cargar automáticamente necesitamos editar el siguiente archivo:

application/config/autoload.php

Guía de estilo PHP

PHP no nos obliga a adoptar un estilo de codificación en específico, pero si existen un conjunto de reglas, que por convención deberíamos adoptar, para mejor entendimiento de nuestros códigos.

PHP Closing Tag: La etiqueta de cierre de php es opcional para el parser, pero si la utilizamos y dejamos algún espacio después de ella, resultara en un error difícil de encontrar. En su lugar, utilizaremos un comentario al final de cada archivo PHP, ejemplo:

/* End of file helloworld.php */

/* Location: system/application/controllers/ */

Nombres de clases y métodosIncorrecto: class myClass, class MYClassCorrecto: class My_class

Incorrecto: filepropesties()Correcto: get_file_properties()

VariablesIncorrecto: $t = 'Texto'; $Text = 'Texto'; $userid = 0;Correcto: $texto = 'Texto'; $user_id = 0;

TRUE, FALSE Y NULL

Page 12: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Recordemos siempre escribir estas CONSTANTES en mayúsculas.

Helpers, Plugins y Librerías

CodeIgniter nos brinda un conjunto de archivos que hacen nuestro desarrollo rápido y ameno, estos son los ayudantes (helpers), librerias y plugins.

Helpers son una colección de funciones agrupadas, por ejemplo el helper de URL, nos brinda funciones para manipular la URL, imprimir links, etc.

Para cargar un helper utilizamos la siguiente sintáxis: $this->load->helper('url');

Podemos cargar múltiples helpers en la misma linea si pasamos como parámetro a la carga un array con los nombres de los helpers que necesitamos.

Ejemplo de uso: <?php echo base_url(); ?>

Plugins estos archivos son prácticamente idénticos a los helpers, su principal diferencia reside en que el plugin contiene normalmente una sola función, a diferencia del helper que es un conjunto de funciones. Los helpers son parte del core de CodeIgniter, los plugins son desarrollados por la comunidad.

Librerias las librerias nos brindan funcionalidad extra que puede ser utilizada a lo largo de diferentes proyectos, generalmente se trata de un conjunto de funciones abstractas con múltiples propósitos. Es posible utilizar la potencia de CodeIgniter dentro de estas librerias, pero para ello deberemos utilizar la siguiente instrucción:

$CI =& get_instance();

Una vez que hemos echo esto, utilizaremos CI como si de This se tratara.

Para cargar una librería en un controlador:

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

Page 13: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Page 14: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Librerias, para que sirven?

Una librería en CodeIgniter es una clase que abstrae funcionalidad en funciones de fácil utilización. Podemos utilizar las librerías a lo largo de diferentes proyectos, también podemos crear nuestras propias librerías.

Algunas de las librerías que CodeIgniter incluye en su core son las que a continuación estaremos revisando.

Benchmarking

Esta librería es utilizada para calcular el tiempo transcurrido entre 2 puntos de control. Si en algún punto de nuestra aplicación notamos lentitud o no responde como lo esperábamos, podemos aplicar puntos de control cuidadosamente hasta que encontremos el cuello de botella y así poder solucionarlo, en su particularidad.

$this->benchmark->mark('start');

// something happens here

$this->benchmark->mark('end');

echo $this->benchmark->elapsed_time('start', 'end');

consumo de memoria

<?php echo $this->benchmark->memory_usage(); ?>

Page 15: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Input and security

Esta clase se encarga de limpiar los daos de manera global, asi como de filtrar los POSTS y los datos de las COOKIES para asegurarse que solo se manejen caracteres alfanuméricos.

Filtro XSS Cross Site Scripting hack prevention filter, este filtro puede ser utilizado de manera especifica en un dato de entrada o ser configurado para correr de manera global.

$name = $this->input->xss_filter($this->input->post('name'));

system/application/config/config.php$config['global_xss_filtering'] = TRUE;

Recuperando datos de POST

Para recuperar datos del POST podemos utilizar la siguiente sintaxis:

$this->input->post('some_field', TRUE);

Si mandamos TRUE como segundo parametro, se aplicará XSS al dato.

Recuperando datos de GET

$this->input->get('some_field', TRUE);

POST o GET?

Esta funcion busca dentro de las variables globales $_POST y $_GET, primero en post. Funciona como las 2 anteriores.

$this->input->get_post('some_field', TRUE);

Page 16: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Direcciones IP

Para recuperar la direccion ip del usuario que visita el sitio utilizaremos la siguiente funcion:

$this->input->ip_address();

Si la ip no es valida regresará 0.0.0.0, para validar una ip tenemos la siguiente funcion:

$this->input->valid_ip($ip)

Page 17: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

EMail

Esta clase nos permite enviar correo electrónico desde nuestra aplicación, es una clase muy sencilla de implementar para crear formas de contacto, listas de correo o para el manejo de cientos de emails. Se puede utilizar la función PHP mail o inclusive utilizar SMTP para su envío.

Esta clase es una librería que deberemos cargar:

$this->load->library('email');

$this->email->from('[email protected]', 'Your Name');

$this->email->to('[email protected]');

$this->email->cc('[email protected]');

$this->email->bcc('[email protected]');

$this->email->subject('Email Test');

$this->email->message('This is a simple test we wrote for the email

class.');

$this->email->send();

echo $this->email->print_debugger();

Email Helper este asistente nos brinda interesantes funciones para el manejo de correo. Por ejemplo: valid_email () verifica si el email pasado como parametro cumple con el formato [email protected].

Práctica: Formulario de contácto

Page 18: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

File Upload

Esta clase nos proporciona una forma simple para subir archivos a un servidor web. Con mucha facilidad podemos filtrar el tipo de archivos admitidos, su tamaño y algunas otras caracteristicas.

$config['upload_path'] = APPPATH . 'uploads/';

$config['allowed_types'] = 'jpeg|jpg|gif|png';

$config['max_size'] = '1024';

$this->load->library('upload', $config);

Práctica: Formulario para envio de archivos

Page 19: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Manipulación de imágenes

Esta clase te permite crear vistas en miniatura, cortar, redimensionar, rotar e inclusive poner marcas de agua en imagenes, de una manera muy sencilla.

Inicialización de la librería para crear vista en miniatura (thumbnail en adelante)

$config['image_library'] = 'gd2';

$config['source_image'] = APPPATH . 'uploads/myimage.jpg';

$config['new_image'] = APPPATH . 'uploads/mynewimage.jpg';

$config['create_thumb'] = TRUE;

$config['maintain_ratio'] = TRUE;

$config['width'] = 75;

$config['height'] = 50;

$this->load->library('image_lib', $config);

$this->image_lib->resize();

Recortar imagenes (Crop)

$config['x_axis'] = '100';

$config['y_axis'] = '40';

if ( ! $this->image_lib->crop())

{

echo $this->image_lib->display_errors();

Page 20: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

}

Rotar imagenes

$config['rotation_angle'] = '90';

Práctica: Manipulación de imagen

Page 21: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Paginación

Esta clase nos brinda funciones para crear facilmente un sistema de paginación. Puede ser completamente personalizado.

Ejemplo:

$this->load->library('pagination');

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

$config['base_url'] = site_url() . '/index.php/results/page/';

$config['total_rows'] = 200;

$config['per_page'] = 20;

$this->pagination->initialize($config);

echo $this->pagination->create_links();

Page 22: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Sesiones

La clase de sesiones nos permite mantener datos de usuario a lo largo de su navegacion a través de nuestra aplicación. Los datos de sesion se guardan dentro de una cookie, que puede estar encriptada, si asi lo deseamos.

Carga de la sesion: $this->load->library('session');

No olvidemos que tambien podemos poner su carga en automático.

A la carga carga de cada página, la clase revisara si existe una sesion para el usuario en particular, si la sesion ha expirado o no existe, se generara. Si la sesion existe, los datos se actualizarán.

Agregando datos a la sesión

Para agregar datos a la sesion utilizaremos el metodo set_userdata pasandole un array como parámetro, ejemplo:

$data = array(

'username' => 'joebloggs',

'email'

=> '[email protected]',

'logged_in' => TRUE

);

$this->session->set_userdata($data);

También podemos agregar un solo dato a la sesión:

$this->session->set_userdata('item_name', 'item_value');

Page 23: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Recuperando datos de sesión

Una vez que tenemos datos almacenadosen sesion, necesitaremos recuperarlos, para ello utilizaremos la siguiente sintáxis:

$this->session->userdata('item');

Flash Data

Una caracteristica bastante curiosa, se trata de datos que estarán disponibles para una sola request del servidor, es decir para pasarse de una pagina a otra, despues de ello son destruidas, esto nos evita sobrecargar la sesion con variables que probablemente no necesitemos todo el tiempo.

$this->session->set_flashdata('item', 'value');

$this->session->flashdata('item');

Page 24: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Validación de formas

Validar nuestros formularios es un elemento importante en todas las aplicaciones. CodeIgniter nos proporciona una librería que nos ayuda con la validación de una manera rápida, estructurada y sencilla.

Para cargar la librería de validación utilizaremos la siguiente instrucción:

$this->load->library('form_validation');

Estableciendo reglas

Una vez cargada la librería podemos comenzar a definir las reglas para la validación de nuestro formulario:

$this->form_validation->set_rules('field_name', 'human_name', 'rules');

Lista de reglas de validación: Required matches[field_name] min_length[x] max_length[x] exact_length[x] alpha alpha_numeric alpha_dash numeric integer is_natural is_natural_no_zero valid_email valid_emails valid_ip valid_base64

Proceso de validación

Page 25: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Cuando se han establecido las reglas de validación para nuestro formulario es momento de ver si todas ellas se cumplen, esto lo podemos realizar con el metodo run que nos regresara TRUE o FALSE, dependiendo si las reglas se cumplen o no:

if($this->form_validation->run() === FALSE)

{

// cargar formulario, las reglas no son cumplidas}else{

// las reglas se cumplieron, grabar datos, etc.}

Mantener los datos anteriores

Si no se pasan las reglas de validación tendremos que volver a mostrar el formulario, es deseable mantener los datos anteriores para no tener que volver a capturar todo:

value="<?php echo set_value('name'); ?>"

Page 26: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Interacción con la base de datos

Las bases de datos escenciales en toda aplicación web, sin una baes de datos no habria forma de almacenar los datos. Afortunadamente CodeIgniter nos brinda una forma sorprendentemente simple de interactuar con la base de datos. La librería de base de datos nos permite trabajar con diferentes bases de datos, practicamente de manera independiente al manejador que seleccionemos.

Para cargar la librería de base de datos: $this->load->database();

Una vez cargada la librería podemos tener acceso a ella mediante el objeto db del controlador o modelo que lo cargo:

$query = $this->db->query('SELECT * FROM 'users'');

foreach($query->result() as $row)

{

echo $row->username;

echo $row->email;

}

Para recuperar los datos en forma de array podemos utilizar la funcion result_array()

Page 27: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Active Record

Los principales metodos de Active record son:

$this->db->select('campo1,campo2,campo3');

$this->db->from('nombre_tabla');

$this->db->get();

$this->db->insert($data);

$this->db->update($data);

$this->db->delete();

Page 28: Manual Codeigniter Basico

CodeIgniter 1.7 Básico

Bibliografía

1.- Adam Griffith, CodeIgniter 1.7 professional development, [PACKT] PUBLISHING, Abril 2010.

2.- http://es.wikipedia.org/wiki/Framework3.- Mundo Geek, http://mundogeek.net/archivos/2010/10/30/frameworks-php/