Professional Documents
Culture Documents
7 Bsico
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
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
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.
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.
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:
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.
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
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:
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
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
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:
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');
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)
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
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);
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();
if ( ! $this->image_lib->crop()) {
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();
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);
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');
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
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'); ?>"
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'');
Para recuperar los datos en forma de array podemos utilizar la funcion result_array()
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();
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/