You are on page 1of 28

CodeIgniter 1.

7 Bsico

Manual del participante

Programa: Programa Integral para el Desarrollo del Servidor Pblico Competencia: Orientacin al Servicio Curso: CodeIgniter 1.7 Bsico Instructora: MTI. Edmundo Prez Castrejn

Duracin: 12 horas

Diciembre 2010

CodeIgniter 1.7 Bsico

ndice de contenido
Qu es un framework...................................................................................................................3 Principales frameworks para PHP...............................................................................................4 Descarga e instalacion de CodeIgniter 1.7..................................................................................7 Ejercicio 1: Descargar y probar la instalacin de CodeIgniter..........................................7 Introduccion al MVC...................................................................................................................8 Modelos..............................................................................................................................8 Carga de modelos...............................................................................................................8 Conexin automtica a la base de datos.............................................................................8 Controladores.....................................................................................................................9 Controlador por default......................................................................................................9 Vistas..................................................................................................................................9 Hola mundo......................................................................................................................10 Ejercicio 2: Crear la aplicacin mas simple y bsica: Hola Mundo........................................10 Carga automtica de recursos....................................................................................................11 Gua de estilo PHP.....................................................................................................................11 Helpers, Plugins y Libreras......................................................................................................12 Librerias, para que sirven?.........................................................................................................14 Benchmarking............................................................................................................................14 Input and security......................................................................................................................15 EMail.........................................................................................................................................17 Prctica: Formulario de contcto.....................................................................................17 File Upload................................................................................................................................18 Prctica: Formulario para envio de archivos....................................................................18 Manipulacin de imgenes........................................................................................................19 Prctica: Manipulacin de imagen...................................................................................20 Paginacin.................................................................................................................................21 Sesiones.....................................................................................................................................22 Agregando datos a la sesin.............................................................................................22 Recuperando datos de sesin...........................................................................................23 Flash Data.........................................................................................................................23 Validacin de formas.................................................................................................................24 Estableciendo reglas.........................................................................................................24 Proceso de validacin.......................................................................................................24 Interaccin con la base de datos................................................................................................26 Active Record...................................................................................................................27 Bibliografa................................................................................................................................28

CodeIgniter 1.7 Bsico

Qu es un framework
En el desarrollo de software, un framework es una estructura conceptual y tecnolgica de soporte definida, normalmente con artefactos o mdulos de software concretos, con base en la cual otro proyecto de software puede ser organizado y desarrollado. Tpicamente, 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 diseados con la intencin de facilitar el desarrollo de software, permitiendo a los diseadores y programadores pasar ms tiempo identificando requerimientos de software que tratando con los tediosos detalles de bajo nivel de proveer un sistema funcional.

CodeIgniter 1.7 Bsico

Principales frameworks para PHP


Zend Framework Probablemente, el profesionalmente. framework ms conocido, y el ms utilizado

Es muy desacoplado, por lo que mucha gente lo considera una librera de componentes ms que un framework. Por otra parte, gracias a esto, podemos utilizarlo en conjunto con otros frameworks. Tiene detrs a Zend, una de las empresas ms importantes de la comunidad PHP, y gran contribuidora a su cdigo 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 da. Ms complejo y elegante que CakePHP y CodeIgniter, pero menos que Zend. Muy completo. El azcar sintctico y la generacin de cdigo ayuda a recortar el tiempo de desarrollo. Recomendado para cualquier tipo de proyecto, en ocasiones combinado con algn componente de Zend.

CakePHP Toma muchas de sus ideas de Ruby on Rails, por lo que gustar especialmente a los fans de la autoconfiguracin y de lo mgico.

CodeIgniter 1.7 Bsico Debido a esto, no es lo ms adecuado para aquellos que quieran tener un mayor control. En su tiempo tena fama de tener muy mala documentacin. Hoy en da eso ha cambiado. Recomendado para proyectos no demasiado complejos, en ocasiones combinado con algn componente de Zend.

CodeIgniter 1.7 Bsico CodeIgniter Probablemente, el menos popular de los cuatro. Muy flexible y sencillo. A menudo demasiado, obligando al programador a desarrollar muchas funcionalidades que deberan incluirse por defecto. Muy fcil de aprender, principalmente porque no hay mucho que aprender, al ser simple hasta el extremo. Tambin es el que menos recursos utiliza, al ser el ms ligero. Est escrito para mantener la compatibilidad con PHP 4, por lo que no aprovecha muchas de las caractersticas 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 iniciacin, si el resto intimidan demasiado; o para aquellos a los que realmente no les gusten los frameworks.

CodeIgniter 1.7 Bsico

Descarga e instalacin de CodeIgniter 1.7


Se asume conocimiento previo de programacin en PHP, as como tambin se asume que existe un servidor web (apache) donde esta configurado el php.

Acceder a la siguiente direccin: http://www.codeigniter.com

Para descargar los archivos hacemos clic en el botn 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 direccin: http://localhost/sandbox/index.php/welcome Podemos visualizar el mensaje de bienvenida:

Ejercicio 1: Descargar y probar la instalacin de CodeIgniter

CodeIgniter 1.7 Bsico

Introduccion al MVC
Cuando hablamos de MVC nos estamos refiriendo a Modelo Vista Controlado un patrn de diseo del que ya habamos hablado anteriormente. Se trata bsicamente de dividir el desarrollo de una aplicacin (en nuestro caso Web) en 3 segmentos, el modelo, el controlador y la vista. Todo en pro de del orden y la reutilizacin de cdigo.

Modelos: Capa de abstraccin de datos


El modelo representa cualquier tipo de datos que vayamos a utilizar en nuestra aplicacin, estos datos pueden provenir de una base de datos, un archivo de texto, RSS Feeds, Api calls, etc. La aplicacin 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 cdigo: $this->load->model('model_name'); Una vez que el modelo ha sido cargado dentro de nuestro controlador, podemos tener acceso a sus mtodos a traves de la siguiente sintaxis: $this->model_name->algun_metodo();

Tambin 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.

Conexin automtica a la base de datos Cuando un modelo se carga, este no se conecta automticamente 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 parmetro a la carga de un modelo, este conectar automticamente a la base de datos que hayamos configurado en el archivo /system/application/config/database.php

CodeIgniter 1.7 Bsico

Controladores: La lgica del negocio


En este segmento es donde se define la lgica 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 presentacin final. Es en el controlador donde toda la magia sucede. Lo controladores son el centro de la aplicacin ya que ellos determinan como se despachan las peticiones HTTP. Los controladores debern 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 informacin que se presenta al usuario, es la cara de nuestra aplicacin, generalmente son archivos HTML (encapsulados en archivos PHP), tambin podemos incluir programacin PHP dentro de las vistas, pero no debemos de perder de vista la separacin 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:

CodeIgniter 1.7 Bsico $data['titulo'] = 'Mi nueva pgina'; $this->load->view('pagina_principal',$data);

Vistas como datos Esta es una interesante caracterstica 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 parmetro 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 permitira 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 histricas del mismo.

Hola mundo
Ejercicio 2: Crear la aplicacin mas simple y bsica: Hola Mundo

CodeIgniter 1.7 Bsico

Carga automtica 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 aplicacin hace uso, por ejemplo de la conexin a la base de datos; podemos entonces, cargar la clase de base de datos y suponer que siempre habra conexin y no necesitaremos cargarla manualmente. Para cargar automticamente necesitamos editar el siguiente archivo: application/config/autoload.php

Gua de estilo PHP


PHP no nos obliga a adoptar un estilo de codificacin en especfico, pero si existen un conjunto de reglas, que por convencin deberamos adoptar, para mejor entendimiento de nuestros cdigos. PHP Closing Tag: La etiqueta de cierre de php es opcional para el parser, pero si la utilizamos y dejamos algn espacio despus de ella, resultara en un error difcil 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 mtodos Incorrecto: class myClass, class MYClass Correcto: class My_class Incorrecto: filepropesties() Correcto: get_file_properties() Variables Incorrecto: $t = 'Texto'; $Text = 'Texto'; $userid = 0; Correcto: $texto = 'Texto'; $user_id = 0; TRUE, FALSE Y NULL

CodeIgniter 1.7 Bsico Recordemos siempre escribir estas CONSTANTES en maysculas.

Helpers, Plugins y Libreras


CodeIgniter nos brinda un conjunto de archivos que hacen nuestro desarrollo rpido y ameno, estos son los ayudantes (helpers), librerias y plugins. Helpers son una coleccin 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 sintxis: $this->load->helper('url'); Podemos cargar mltiples helpers en la misma linea si pasamos como parmetro a la carga un array con los nombres de los helpers que necesitamos. Ejemplo de uso: <?php echo base_url(); ?>

Plugins estos archivos son prcticamente idnticos a los helpers, su principal diferencia reside en que el plugin contiene normalmente una sola funcin, 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 mltiples propsitos. Es posible utilizar la potencia de CodeIgniter dentro de estas librerias, pero para ello deberemos utilizar la siguiente instruccin: $CI =& get_instance();

Una vez que hemos echo esto, utilizaremos CI como si de This se tratara. Para cargar una librera en un controlador:

CodeIgniter 1.7 Bsico $this->load->library('name');

CodeIgniter 1.7 Bsico

Librerias, para que sirven?


Una librera en CodeIgniter es una clase que abstrae funcionalidad en funciones de fcil utilizacin. Podemos utilizar las libreras a lo largo de diferentes proyectos, tambin podemos crear nuestras propias libreras. Algunas de las libreras que CodeIgniter incluye en su core son las que a continuacin estaremos revisando.

Benchmarking
Esta librera es utilizada para calcular el tiempo transcurrido entre 2 puntos de control. Si en algn punto de nuestra aplicacin notamos lentitud o no responde como lo esperbamos, 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(); ?>

CodeIgniter 1.7 Bsico

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 alfanumricos. 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);

CodeIgniter 1.7 Bsico 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)

CodeIgniter 1.7 Bsico

EMail
Esta clase nos permite enviar correo electrnico desde nuestra aplicacin, 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 funcin PHP mail o inclusive utilizar SMTP para su envo. Esta clase es una librera que deberemos cargar: $this->load->library('email'); $this->email->from('you@example.com', 'Your Name'); $this->email->to('someone@example.com'); $this->email->cc('another@person.com'); $this->email->bcc('theboss@example.com'); $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 name@domain.ext. Prctica: Formulario de contcto

CodeIgniter 1.7 Bsico

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 tamao 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);

Prctica: Formulario para envio de archivos

CodeIgniter 1.7 Bsico

Manipulacin de imgenes
Esta clase te permite crear vistas en miniatura, cortar, redimensionar, rotar e inclusive poner marcas de agua en imagenes, de una manera muy sencilla. Inicializacin de la librera 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()) {

CodeIgniter 1.7 Bsico echo $this->image_lib->display_errors(); }

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

Prctica: Manipulacin de imagen

CodeIgniter 1.7 Bsico

Paginacin
Esta clase nos brinda funciones para crear facilmente un sistema de paginacin. 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();

CodeIgniter 1.7 Bsico

Sesiones
La clase de sesiones nos permite mantener datos de usuario a lo largo de su navegacion a travs de nuestra aplicacin. 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 automtico. A la carga carga de cada pgina, 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 actualizarn. Agregando datos a la sesin Para agregar datos a la sesion utilizaremos el metodo set_userdata pasandole un array como parmetro, ejemplo: $data = array( 'username' => 'joebloggs', 'email' => 'j.bloggs@jbloggs.com', 'logged_in' => TRUE );

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

Tambin podemos agregar un solo dato a la sesin: $this->session->set_userdata('item_name', 'item_value');

CodeIgniter 1.7 Bsico

Recuperando datos de sesin Una vez que tenemos datos almacenadosen sesion, necesitaremos recuperarlos, para ello utilizaremos la siguiente sintxis: $this->session->userdata('item');

Flash Data Una caracteristica bastante curiosa, se trata de datos que estarn 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');

CodeIgniter 1.7 Bsico

Validacin de formas
Validar nuestros formularios es un elemento importante en todas las aplicaciones. CodeIgniter nos proporciona una librera que nos ayuda con la validacin de una manera rpida, estructurada y sencilla. Para cargar la librera de validacin utilizaremos la siguiente instruccin: $this->load->library('form_validation');

Estableciendo reglas Una vez cargada la librera podemos comenzar a definir las reglas para la validacin de nuestro formulario: $this->form_validation-> set_rules('field_name', 'human_name', 'rules');

Lista

de reglas de validacin: 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 validacin

CodeIgniter 1.7 Bsico

Cuando se han establecido las reglas de validacin 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 validacin 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'); ?>"

CodeIgniter 1.7 Bsico

Interaccin con la base de datos


Las bases de datos escenciales en toda aplicacin 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 librera de base de datos nos permite trabajar con diferentes bases de datos, practicamente de manera independiente al manejador que seleccionemos. Para cargar la librera de base de datos: $this->load->database();

Una vez cargada la librera 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()

CodeIgniter 1.7 Bsico

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();

CodeIgniter 1.7 Bsico

Bibliografa
1.- Adam Griffith, CodeIgniter 1.7 professional development, [PACKT] PUBLISHING, Abril 2010. 2.- http://es.wikipedia.org/wiki/Framework 3.- Mundo Geek, http://mundogeek.net/archivos/2010/10/30/frameworks-php/

You might also like