3. 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
José Manuel Lucas
miércoles 29 de junio de 2011
4. Iniciación al desarrollo PHP con el
framework Codeigniter
Introducción
José Manuel Lucas
miércoles 29 de junio de 2011
5. 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...)
José Manuel Lucas
miércoles 29 de junio de 2011
6. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Qué es MVC?
-Separación entre lógica y presentación, dividiendo las tareas en
3 partes:
Controlador
Recibe los datos, los interpreta y los dirige al modelo o a la
vista.
1
José Manuel Lucas
miércoles 29 de junio de 2011
7. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Qué es MVC?
-Separación entre lógica y presentación, dividiendo las tareas en
3 partes:
Modelo Controlador
Encargado de obtener los Recibe los datos, los
datos de la BBDD interpreta y los dirige al
modelo o a la vista.
2 1
José Manuel Lucas
miércoles 29 de junio de 2011
8. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Qué es MVC?
-Separación entre lógica y presentación, dividiendo las tareas en
3 partes:
Modelo Vista Controlador
Encargado de Presenta los datos Recibe los datos,
obtener los datos (capa de layout) los interpreta y los
de la BBDD dirige al modelo o a
la vista.
2 3 1
José Manuel Lucas
miércoles 29 de junio de 2011
9. 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
interno
DESVENTAJAS: Mayor tiempo de desarrollo, menor
revisión del código
José Manuel Lucas
miércoles 29 de junio de 2011
10. 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 comunidad
DESVENTAJAS: Menor control sobre el código, no
siempre es posible, rendimiento...
José Manuel Lucas
miércoles 29 de junio de 2011
11. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Qué alternativas hay?
-Otros frameworks:
Symfony
Zend Framework
CakePHP
Vevui
YII
FuelPHP
Yupp
José Manuel Lucas
miércoles 29 de junio de 2011
12. 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
José Manuel Lucas
miércoles 29 de junio de 2011
13. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Por qué CodeIgniter?
1) Abierto
Puedes copiar, modificar, crear proyectos relacionados...
El código fuente está disponible en BitBucket
Propiedad de Ellislab
Proyectos derivados: FuelCMS, planet-ci...
José Manuel Lucas
miércoles 29 de junio de 2011
14. 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ʼ
José Manuel Lucas
miércoles 29 de junio de 2011
15. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Por qué CodeIgniter?
3) Arquitectura MVC
a) 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 ;)
José Manuel Lucas
miércoles 29 de junio de 2011
16. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Por qué CodeIgniter?
3) Arquitectura MVC
b) 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
José Manuel Lucas
miércoles 29 de junio de 2011
17. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Por qué CodeIgniter?
3) Arquitectura MVC
c) VISTAS: “application/views”
Parte de presentación de datos
Mayormente HTML, con un poco de PHP
Puede utilizar pseudovariables => {title}
José Manuel Lucas
miércoles 29 de junio de 2011
18. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Por qué CodeIgniter?
4) Soporte para diferentes motores de BBDD
MySQL/MySQLi
PostgreSQL
ODBC & MSSQL
SQLITE
Oracle
José Manuel Lucas
miércoles 29 de junio de 2011
19. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Por qué CodeIgniter?
5) Amplia Comunidad
Wiki, foro, bugtracker, etc en http://www.codeigniter.com
Muchos tutoriales, presentaciones, directorios de recursos...
“CodeIgniter Community Chieftain” = MODERADOR
CICON => Conferencia a nivel mundial
José Manuel Lucas
miércoles 29 de junio de 2011
20. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Por qué CodeIgniter?
6) Librerías para casi todo
Seguridad, Validación de formularios, Sesiones, Email, FTP,
Redimensionar imágenes, Paginación...
+
LIBRERÍAS EXTERNAS (Twitter, Facebook, etc...)
http://www.codeigniterdirectory.com
José Manuel Lucas
miércoles 29 de junio de 2011
21. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Por qué CodeIgniter?
7) Curva de aprendizaje corta
No 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?)
José Manuel Lucas
miércoles 29 de junio de 2011
22. Iniciación al desarrollo PHP con el
framework Codeigniter
¿Por qué CodeIgniter?
8) Soporte para plantillas
Aunque 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}
José Manuel Lucas
miércoles 29 de junio de 2011
23. Iniciación al desarrollo PHP con el
framework Codeigniter
Primeros pasos con
CodeIgniter
José Manuel Lucas
miércoles 29 de junio de 2011
24. 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.
José Manuel Lucas
miércoles 29 de junio de 2011
25. 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
José Manuel Lucas
miércoles 29 de junio de 2011
26. Iniciación al desarrollo PHP con el
framework Codeigniter
Instalación y configuración mínima
...y ya está!!!
José Manuel Lucas
miércoles 29 de junio de 2011
27. 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)
José Manuel Lucas
miércoles 29 de junio de 2011
28. 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 .htaccess
RewriteEngine
on
RewriteCond
$1
!^(index.php|images|robots.txt)
RewriteRule
^(.*)$
/index.php/$1
[L]
http://url.com/controlador/metodo/var1/var2...
José Manuel Lucas
miércoles 29 de junio de 2011
29. 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
}
}
José Manuel Lucas
miércoles 29 de junio de 2011
30. 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’
));
}
}
José Manuel Lucas
miércoles 29 de junio de 2011
31. 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>
José Manuel Lucas
miércoles 29 de junio de 2011
32. Iniciación al desarrollo PHP con el
framework Codeigniter
Controladores
Agrupan funcionalidades comunes
class
Blog
extends
CI_Controller
{
function
list_posts($pag=1){
}
function
categories($cat=’’){
}
function
post($id){
}
}
José Manuel Lucas
miércoles 29 de junio de 2011
33. Iniciación al desarrollo PHP con el
framework Codeigniter
Controladores
Agrupan funcionalidades comunes
class
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
José Manuel Lucas
miércoles 29 de junio de 2011
34. Iniciación al desarrollo PHP con el
framework Codeigniter
Controladores
Trabajan con los datos, cargan modelos y vistas
class
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
}
}
José Manuel Lucas
miércoles 29 de junio de 2011
35. Iniciación al desarrollo PHP con el
framework Codeigniter
Vistas
Representan 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
?>
José Manuel Lucas
miércoles 29 de junio de 2011
36. Iniciación al desarrollo PHP con el
framework Codeigniter
Controladores
Trabajan con los datos, cargan modelos y vistas
class
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
}
}
José Manuel Lucas
miércoles 29 de junio de 2011
37. Iniciación al desarrollo PHP con el
framework Codeigniter
Modelos
Trabajan 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ʼ);
José Manuel Lucas
miércoles 29 de junio de 2011
38. Iniciación al desarrollo PHP con el
framework Codeigniter
Modelos
class
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();
}
}
José Manuel Lucas
miércoles 29 de junio de 2011
39. Iniciación al desarrollo PHP con el
framework Codeigniter
Modelos
Soportan 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
José Manuel Lucas
miércoles 29 de junio de 2011
40. Iniciación al desarrollo PHP con el
framework Codeigniter
Modelos
Devolver valores
Varias 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
José Manuel Lucas
miércoles 29 de junio de 2011
41. Iniciación al desarrollo PHP con el
framework Codeigniter
Modelos
Mé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
José Manuel Lucas
miércoles 29 de junio de 2011
42. Iniciación al desarrollo PHP con el
framework Codeigniter
Librerías y Helpers
José Manuel Lucas
miércoles 29 de junio de 2011
43. Iniciación al desarrollo PHP con el
framework Codeigniter
Helpers
Funciones de utilidades (ayuda)... normalmente agrupadas
Ejemplo: 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
password
do_hash(‘password’,
‘md5’);
//MD5
de
password
José Manuel Lucas
miércoles 29 de junio de 2011
44. Iniciación al desarrollo PHP con el
framework Codeigniter
Helpers
Se 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’
=>
‘josemanuel@jmlweb.es’,
‘password’
=>
do_hash(‘mi
contraseña’,
‘md5’)
));
José Manuel Lucas
miércoles 29 de junio de 2011
45. Iniciación al desarrollo PHP con el
framework Codeigniter
Helpers
Crear 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>
José Manuel Lucas
miércoles 29 de junio de 2011
46. Iniciación al desarrollo PHP con el
framework Codeigniter
Helpers
Utilizar los recursos de CodeIgniter
$CI
=&
get_instance();
//$CI
=
$this
//CodeIgniter
object
$CI-‐>load-‐>helper(‘url’);
$CI-‐>load-‐>model(‘users’);
$users
=
$this-‐>users-‐>get_users();
José Manuel Lucas
miércoles 29 de junio de 2011
47. Iniciación al desarrollo PHP con el
framework Codeigniter
Helpers
Extendiendo los helpers
system/helpers/date_helper.php
application/helpers/MY_date_helper.php
José Manuel Lucas
miércoles 29 de junio de 2011
48. Iniciación al desarrollo PHP con el
framework Codeigniter
Helpers
Extendiendo 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());
José Manuel Lucas
miércoles 29 de junio de 2011
49. Iniciación al desarrollo PHP con el
framework Codeigniter
Helpers
Extendiendo 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());
José Manuel Lucas
miércoles 29 de junio de 2011
50. Iniciación al desarrollo PHP con el
framework Codeigniter
Librerías (para los puretas: Bibliotecas)
Subprogramas para facilitar el desarrollo
Ejemplo: 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>
José Manuel Lucas
miércoles 29 de junio de 2011
51. Iniciación al desarrollo PHP con el
framework Codeigniter
Librerías útiles
Database -> Trabajo con BBDD
Email -> Mails con bcc, adjuntos, codificación, html...
Form_validation -> Validación del lado servidor
Input -> Obtener $_POST saneados
Image_lib -> Redimensionar y recortar imágenes
Pagination -> Paginación de items
Session -> Manejo de sesiones (OJO: No $_SESSION)
Upload -> Subida de ficheros, con limitación de tamaño,
tipo...
José Manuel Lucas
miércoles 29 de junio de 2011
52. Iniciación al desarrollo PHP con el
framework Codeigniter
Algunos ejemplos
Input
$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
José Manuel Lucas
miércoles 29 de junio de 2011
53. Iniciación al desarrollo PHP con el
framework Codeigniter
Extender y crear librerías
Funcionamiento análogo al de helpers.
system/libraries/pagination.php
application/libraries/MY_pagination.php
Para usar los recursos: $CI
=&
get_instance();
José Manuel Lucas
miércoles 29 de junio de 2011
54. Iniciación al desarrollo PHP con el
framework Codeigniter
Extra
José Manuel Lucas
miércoles 29 de junio de 2011
55. Iniciación al desarrollo PHP con el
framework Codeigniter
Whilewairport
Networking en
aeropuertos
José Manuel Lucas
miércoles 29 de junio de 2011
56. Iniciación al desarrollo PHP con el
framework Codeigniter
Sym.posium
Eventos científicos
José Manuel Lucas
miércoles 29 de junio de 2011
57. Iniciación al desarrollo PHP con el
framework Codeigniter
¡¡¡Se pueden desarrollar aplicaciones comerciales
con CodeIgniter!!!
YO: HTML + CSS (turbineCSS) + jQuery +
CodeIgniter + MySQL + GIT
José Manuel Lucas
miércoles 29 de junio de 2011
58. 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
José Manuel Lucas
miércoles 29 de junio de 2011
59. Iniciación al desarrollo PHP
con 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