Iniciación al desarrollo PHP con el Framework CodeIgniter
por José Manuel Lucas / @jmlweb
miércoles 29 de junio de 2011
Hashtag #adwe_mur
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Indice
- Introducción-¿Qué es un framework? ¿Qué es MVC? -¿Qué alternativas hay?, ¿Por qué CodeIgniter?
- Primeros pasos con Codeigniter-Instalación, configuración y enrutado con CI-Flujo de trabajo: Controladores, Modelos y Vistas-Librerías y Helpers
- Extra
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Introducción
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Qué es un framework?-CONVENCIONES + FUNCIONALIDADES + LIBRERÍAS-OBJETIVO: Agilizar y organizar desarrollo, evitar tareas repetitivas...
EJEMPLOS EN FRAMEWORKS PHP:-Librerías: Enrutado, MVC, Plantillas-Abstracción de BBDD (Las consultas son independientes del motor, MySQL, Oracle, MSSQL...)
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Qué es MVC?
ControladorRecibe los datos, los interpreta y los dirige al modelo o a la
vista.1
-Separación entre lógica y presentación, dividiendo las tareas en 3 partes:
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Qué es MVC?
Modelo ControladorEncargado de obtener los
datos de la BBDD
2
Recibe los datos, los interpreta y los dirige al
modelo o a la vista.1
-Separación entre lógica y presentación, dividiendo las tareas en 3 partes:
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Qué es MVC?
Modelo Vista ControladorEncargado de
obtener los datos de la BBDD
2
Presenta los datos (capa de layout)
3
Recibe los datos, los interpreta y los
dirige al modelo o a la vista.
1
-Separación entre lógica y presentación, dividiendo las tareas en 3 partes:
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Qué alternativas hay?
-Yo me lo guiso, yo me lo como:
VENTAJAS: Conocimiento profundo del funcionamiento internoDESVENTAJAS: Mayor tiempo de desarrollo, menor revisión del código
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Qué alternativas hay?
-CMS (Wordpress, Drupal...):
VENTAJAS: Mayor velocidad de desarrollo, código mantenido por la comunidadDESVENTAJAS: Menor control sobre el código, no siempre es posible, rendimiento...
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Qué alternativas hay?
-Otros frameworks: SymfonyZend FrameworkCakePHPVevuiYIIFuelPHPYupp
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Por qué CodeIgniter?Recomendado por el creador de PHP
Llévale la contraria......si te atreves
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Por qué CodeIgniter?
1) AbiertoPuedes copiar, modificar, crear proyectos relacionados...
El código fuente está disponible en BitBucket
Propiedad de Ellislab
Proyectos derivados: FuelCMS, planet-ci...
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Por qué CodeIgniter?
2) Configuración MUY sencilla-Vectores definidos en ficheros, dentro del directorio “config”
-Por defecto: config.php, database.php, autoload.php, etc
-Podemos añadir otros: nav.php, twitter.php, etc...
EJEMPLO: $config[ʻtitleʼ] = ʻCharla sobre CodeIgniterʼ
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Por qué CodeIgniter?
3) Arquitectura MVCa) CONTROLADORES: “application/controllers”
Cargan y gestionan recursos (modelos, vistas, librerías...)
Redirigen la URL al método correspondiente:
“http://www.url.com/controlador/método/parámetro1/
parámetro2/...” => BUENO PARA EL SEO ;)
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Por qué CodeIgniter?
3) Arquitectura MVCb) MODELOS: “application/models”
Lógica de negocio e información del sistema
“Parte de la Base de Datos” en términos coloquiales :)
Independiente del sistema gestor de BBDD
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Por qué CodeIgniter?
3) Arquitectura MVCc) VISTAS: “application/views”
Parte de presentación de datos
Mayormente HTML, con un poco de PHP
Puede utilizar pseudovariables => {title}
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Por qué CodeIgniter?
4) Soporte para diferentes motores de BBDDMySQL/MySQLi
PostgreSQL
ODBC & MSSQL
SQLITE
Oracle
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Por qué CodeIgniter?
5) Amplia ComunidadWiki, foro, bugtracker, etc en http://www.codeigniter.com
Muchos tutoriales, presentaciones, directorios de recursos...
“CodeIgniter Community Chieftain” = MODERADOR
CICON => Conferencia a nivel mundial
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Por qué CodeIgniter?
6) Librerías para casi todoSeguridad, Validación de formularios, Sesiones, Email, FTP,
Redimensionar imágenes, Paginación...
+
LIBRERÍAS EXTERNAS (Twitter, Facebook, etc...)
http://www.codeigniterdirectory.com
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Por qué CodeIgniter?
7) Curva de aprendizaje cortaNo obliga a estudiar nueva sintaxis.
“Lo bueno, si breve, dos veces bueno y aún lo malo, si poco, no
tan malo”, Baltasar Gracián (¿Hace falta más explicación?)
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¿Por qué CodeIgniter?
8) Soporte para plantillasAunque no es necesario, se pueden usar pseudovariables en las
vistas. => Más cómodo para diseñadores{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Primeros pasos con CodeIgniter
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Instalación y configuración mínima
1) Configurar un host virtual (Wamp, Mamp, XAMPP...)2) Descargar última versión de CodeIgniter (http://www.codeigniter.com/downloads)3) Descomprimir el fichero en el directorio al que apunta el host virtual.
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Instalación y configuración mínima
application/config/config.php
$config['base_url'] = 'http://mihost.com/';$config['index_page'] = ''; //modificar el .htaccess$config['global_xss_filtering'] = TRUE; //Más seguro
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Instalación y configuración mínima
...y ya está!!!
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Rutas en CodeIgniter
“http://www.url.com/controlador/método/parámetro1/
parámetro2/...”
No es estricto, también: index.php?c=controlador&m=metodo
Las URL se pueden redirigir desde application/config/routes.php
También se puede añadir un sufijo a las URL (.html)
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Rutas en CodeIgniter
Por defecto, se llama al controlador Welcome
http://url.com/index.php/controlador/metodo/var1/var2...
Para quitarlo de la url se utiliza un archivo .htaccessRewriteEngine onRewriteCond $1 !^(index\.php|images|robots\.txt)RewriteRule ^(.*)$ /index.php/$1 [L]
http://url.com/controlador/metodo/var1/var2...
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Estructura básica de un controlador
class Welcome extends CI_Controller { public function __construct()
{ parent::__construct();
//código que se repite en todos los métodos } public function index() { $this-‐>load-‐>view('welcome_message'); //carga la vista }}
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Pasando variables a las vistas
class Welcome extends CI_Controller { function __construct()
{ parent::__construct();
//código que se repite en todos los métodos } function index() { $this-‐>load-‐>view('welcome_message', array(
‘message’ => ‘Bienvenido a CodeIgniter’));
}}
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Pasando variables a las vistas
<h1><?php echo $message ?></h1>
<p>The page you are looking at is being generated dynamically by CodeIgniter.</p>
<p>If you would like to edit this page you'll find it located at:</p><code>application/views/welcome_message.php</code>
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
ControladoresAgrupan funcionalidades comunesclass Blog extends CI_Controller { function list_posts($pag=1){ }
function categories($cat=’’){ } function post($id){ }
}
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
ControladoresAgrupan funcionalidades comunesclass Blog extends CI_Controller { function list_posts($pag=1){ }
function categories($cat=’’){ } function post($id){ }
}
//http://url.com/blog/list_posts/3//http://url.com/categories/html5//http://url.com/post/45
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
ControladoresTrabajan con los datos, cargan modelos y vistasclass Blog extends CI_Controller { function list_posts($offset=0){
$this-‐>config-‐>load(‘blog’);$this-‐>load-‐>model(‘blog_model’);$per_page = $this-‐>config-‐>item(‘per_page’);$data[‘posts’] = $this-‐>blog_model-‐>get_posts($offset, $per_page);$this-‐>load-‐>view(‘blog/list_posts’, $data); //subdirectorio blog
}}
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
VistasRepresentan los datos<h1>Listado de posts</h1><?php foreach($posts as $post): ?><div class=”post”><h2><?php echo $post[‘title’] ?></h2><div class=”post_content”><?php echo $post[‘content’] ?></div>
</div><?php endforeach ?>
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
ControladoresTrabajan con los datos, cargan modelos y vistasclass Blog extends CI_Controller { function list_posts($offset=0){
$this-‐>config-‐>load(‘blog’);$this-‐>load-‐>model(‘blog_model’);$per_page = $this-‐>config-‐>item(‘per_page’);$data[‘posts’] = $this-‐>blog_model-‐>get_posts($offset, $per_page);$this-‐>load-‐>view(‘blog/list_posts’, $data); //subdirectorio blog
}}
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
ModelosTrabajan con la BBDD
config/database.php: Introducir datos conexión
2 OPCIONES: config/autoload.php: Cargar la librería ʻdatabaseʼEn el controlador: $this->load->library(ʻdatabaseʼ);
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Modelosclass Blog_model extends CI_Model {function __construct(){parent::__construct();
}function get_posts($offset=0, $per_page=10){$query = $this-‐>db-‐>get(‘posts’, 0, 10);//también $this-‐>db-‐>query(‘SELECT * FROM posts LIMIT 10, 0’);return $query-‐>result_array();
}}
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
ModelosSoportan Active Record
$query = $this-‐>db-‐>insert(‘authors’, array(‘name’ => ‘José Manuel Lucas’,‘age’ => 27,‘position’ => ‘Web Developer’
)); //esta consulta sólo devuelve TRUE/FALSE
$query = $this-‐>db-‐>join(‘authors’, ‘authors.id = posts.author’)-‐>select(‘posts.*, authors.name’)-‐>get_where(‘posts’, array( ‘id’ => 6))-‐>row_array(); //esto devuelve una sola fila
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
ModelosDevolver valoresVarias filas
-‐>result() //Array de objetos con los resultados-‐>result_array() //Matriz con los resultados
Una fila-‐>row() //Objeto con los resultados-‐>row_array() //Array con los resultados
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
ModelosMétodos útiles
$this-‐>db-‐>last_query() //Última consulta. SELECT * FROM authors...$this-‐>db-‐>insert_id() //ID del último objeto insertado en BBDD$this-‐>db-‐>affected_rows() //Filas afectadas en última operación$this-‐>db-‐>count_all(‘authors’) //Filas totales en una tabla
$query = $this-‐>db-‐>get(‘authors’);$query-‐>num_rows(); //Número de resultados del último select
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Librerías y Helpers
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
HelpersFunciones de utilidades (ayuda)... normalmente agrupadasEjemplo: array, date, file, form, language, security, string, text, url
Se cargan en el controlador$this-‐>load-‐>helper(‘security’); //O cargarlo en config/autoload.php
do_hash(‘password’); //SHA1 de passworddo_hash(‘password’, ‘md5’); //MD5 de password
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
HelpersSe pueden utilizar en vistas, controladores, modelos, otros helpers, librerías...
<p><?php echo anchor('blog/comments', 'Click Here') ?></p>
$this-‐>db-‐>insert(‘users’, array(‘name’ => ‘José Manuel Lucas’,‘email’ => ‘[email protected]’,‘password’ => do_hash(‘mi contraseña’, ‘md5’)
));
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
HelpersCrear un helper
1) application/helper/adwe_helper.php //Sufijo “helper” necesario
2) function adwe_name(){ return ‘Asociación de Desarrolladores Web de España’;
}
3) Cargar el helper -‐> Autoload o $this-‐>load-‐>helper(‘adwe’);
3) <h1><?php echo adwe_name() ?></h1>
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
HelpersUtilizar los recursos de CodeIgniter
$CI =& get_instance(); //$CI = $this //CodeIgniter object$CI-‐>load-‐>helper(‘url’);$CI-‐>load-‐>model(‘users’);$users = $this-‐>users-‐>get_users();
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
HelpersExtendiendo los helpers
system/helpers/date_helper.phpapplication/helpers/MY_date_helper.php
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
HelpersExtendiendo los helpers
Añadiendo una función:function spanish_date($strtime){return date(‘d/m/Y’, $strtime);
} //añadimos una nueva función
$this-‐>load-‐>helper(‘date’);echo spanish_date(time());
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
HelpersExtendiendo los helpers
Sobreescribiendo una función:function unix_to_human($time = ‘’, $seconds = FALSE){return date(‘d/m/Y H:i:s’, $strtime);
}//sobreescribimos la función “unix_to_human” de system/helpers/date.php
$this-‐>load-‐>helper(‘date’);echo unix_to_human(time());
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Librerías (para los puretas: Bibliotecas)Subprogramas para facilitar el desarrolloEjemplo: cart, database, email, form_validation, image_lib, pagination, session, upload...$this-‐>load-‐>library(‘pagination’);$config['base_url'] = 'http://url.com/posts/';$config['total_rows'] = '200';$config['per_page'] = '20'; $this-‐>pagination-‐>initialize($config);
<div class=”pagination”><?php echo $this-‐>pagination-‐>create_links() ?></div>
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Librerías útilesDatabase -> Trabajo con BBDDEmail -> Mails con bcc, adjuntos, codificación, html...Form_validation -> Validación del lado servidorInput -> Obtener $_POST saneadosImage_lib -> Redimensionar y recortar imágenesPagination -> Paginación de itemsSession -> Manejo de sesiones (OJO: No $_SESSION)Upload -> Subida de ficheros, con limitación de tamaño, tipo...
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Algunos ejemplosInput$this-‐>input-‐>post(‘name’) //$_POST[‘name’];
Image_lib$config['source_image'] = '/path/to/image/mypic.jpg';$config['maintain_ratio'] = TRUE;$config['create_thumb'] = TRUE;$config['width'] = 75;$config['height'] = 50;$this-‐>load-‐>library(‘image_lib’, $config);$this-‐>image_lib-‐>resize(); //Crea ‘my_pic_thumb.jpg’ con tamaño 75x70
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Extender y crear libreríasFuncionamiento análogo al de helpers.
system/libraries/pagination.phpapplication/libraries/MY_pagination.php
Para usar los recursos: $CI =& get_instance();
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Extra
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Whilewairport
Networking en aeropuertos
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
Sym.posium
Eventos científicos
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
¡¡¡Se pueden desarrollar aplicaciones comerciales con CodeIgniter!!!
YO: HTML + CSS (turbineCSS) + jQuery + CodeIgniter + MySQL + GIT
miércoles 29 de junio de 2011
José Manuel Lucas
Iniciación al desarrollo PHP con el framework Codeigniter
FuelCMS => Sistema híbrido CMS/Framework basado en CodeIgniter
MY_Model => Mini-ORM
Language_editor => Edición de idiomas multilenguaje
miércoles 29 de junio de 2011
Iniciación al desarrollo PHPcon el framework Codeigniter
MUCHAS GRACIAS!!!!
José Manuel Lucas
twitter: @jmlweb
blog: http://jmlweb.es
work: www.digio.es
miércoles 29 de junio de 2011