Download - Symfony2 y su ecosistema
Francisco Javier Aceituno Lapido
• Ingeniero en Informática (UPM) 2010
• Colaborador en symfony-madrid
• Arquitecto de Software en ideup!
• Amante del mundo PHP y Symfony desde 2008
2 Symfony 2 y su ecosistema
¿ Qué es Symfony 2?
3
8 Bundles
Symfony 2 y su ecosistema
¿ Qué es Symfony 2?
4
ClassLoader HttpFoundation Routing EventDispatcher
DependencyInjection Console Config
22 componentes
Symfony 2 y su ecosistema
¿ Qué es Symfony 2?
5
ClassLoader HttpFoundation Routing EventDispatcher
DependencyInjection Console Config
22 componentes
Twig Doctrine Monolog Assetic SwiftMailer
5 Librerías externas
Symfony 2 y su ecosistema
¿ Qué es Symfony 2?
6
ClassLoader HttpFoundation Routing EventDispatcher
DependencyInjection Console Config
22 componentes
Twig Doctrine Monolog Assetic SwiftMailer
WebProfilerBundle
5 Librerías externas 8 Bundles
TwigBundle
SecurityBundle
FrameworkBundle
Symfony 2 y su ecosistema
¿ Qué es Symfony 2?
7
ClassLoader HttpFoundation Routing EventDispatcher
DependencyInjection Console Config
22 componentes
Twig Doctrine Monolog Assetic SwiftMailer
WebProfilerBundle
5 Librerías externas 8 Bundles
TwigBundle
SecurityBundle
FrameworkBundle
Symfony 2 y su ecosistema
ClassLoader
https://github.com/symfony/ClassLoader
Carga automáticamente las clases de tu proyecto si
– Definición de las clases siguen el estadar PSR-0 (PHP 5.3)
Codemotion/Model/Task.php Codemotion\Model\Task
– Definición de las clases según el convenio PEAR
Codemotion/Model/Task.php Codemotion_Model_Task
8 Symfony 2 y su ecosistema
HttpFoundation
https://github.com/symfony/HttpFoundation
Define una capa orientada a objetos de la especificación de HTTP
9 Symfony 2 y su ecosistema
HttpFoundation
https://github.com/symfony/HttpFoundation
Define una capa orientada a objetos de la especificación de HTTP
10
Request query
request cookies
attributes files
server headers
Symfony 2 y su ecosistema
HttpFoundation
https://github.com/symfony/HttpFoundation
Define una capa orientada a objetos de la especificación de HTTP
11
Request query
request cookies
attributes files
server headers
$_GET
$_GET $_POST $_COOKIE
$_FILES
$_SERVER
Symfony 2 y su ecosistema
HttpFoundation
https://github.com/symfony/HttpFoundation
Define una capa orientada a objetos de la especificación de HTTP
12
Request query
request cookies
attributes files
server headers
$_GET
$_GET $_POST $_COOKIE
$_FILES
$_SERVER
all() keys()
replace() add() get() set() has()
remove()
Symfony 2 y su ecosistema
HttpFoundation
https://github.com/symfony/HttpFoundation
Define una capa orientada a objetos de la especificación de HTTP
13
Request query
request cookies
attributes files
server headers
$_GET
$_GET $_POST $_COOKIE
$_FILES
$_SERVER
all() keys()
replace() add() get() set() has()
remove()
Response
content status
headers
Symfony 2 y su ecosistema
HttpFoundation
https://github.com/symfony/HttpFoundation
Define una capa orientada a objetos de la especificación de HTTP
14
Request query
request cookies
attributes files
server headers
$_GET
$_GET $_POST $_COOKIE
$_FILES
$_SERVER
all() keys()
replace() add() get() set() has()
remove()
Response
content status
headers
$_GET
send() prepare()
Symfony 2 y su ecosistema
HttpFoundation
https://github.com/symfony/HttpFoundation
Define una capa orientada a objetos de la especificación de HTTP
15
Request query
request cookies
attributes files
server headers
$_GET
$_GET $_POST $_COOKIE
$_FILES
$_SERVER
all() keys()
replace() add() get() set() has()
remove()
Response
content status
headers
$_GET
send() prepare()
cache
setPublic() setPrivate()
expire) setExpires() setMaxAge()
setLastModified() …
Symfony 2 y su ecosistema
Routing
https://github.com/symfony/Routing
Mapea una petición HTTP (Request) a un conjunto de variables
16 Symfony 2 y su ecosistema
Routing
https://github.com/symfony/Routing
Mapea una petición HTTP (Request) a un conjunto de variables
17
Router
app.php/task/list
configuración
Symfony 2 y su ecosistema
Routing
https://github.com/symfony/Routing
Mapea una petición HTTP (Request) a un conjunto de variables
18
Router
app.php/task/list
configuración
task/list
Symfony 2 y su ecosistema
Routing
https://github.com/symfony/Routing
Mapea una petición HTTP (Request) a un conjunto de variables
19
Router
app.php/task/list
configuración
task/list controller: TaskController, action: listAction
Symfony 2 y su ecosistema
Routing
https://github.com/symfony/Routing
Mapea una petición HTTP (Request) a un conjunto de variables
20
Router
app.php/task/list
app.php/task/1/show
configuración
task/list controller: TaskController, action: listAction
Symfony 2 y su ecosistema
Routing
https://github.com/symfony/Routing
Mapea una petición HTTP (Request) a un conjunto de variables
21
Router
app.php/task/list
app.php/task/1/show
configuración
task/list
task/{id}/show
controller: TaskController, action: listAction
Symfony 2 y su ecosistema
Routing
https://github.com/symfony/Routing
Mapea una petición HTTP (Request) a un conjunto de variables
22
Router
app.php/task/list
app.php/task/1/show
task/list
task/{id}/show
controller: TaskController, action: listAction
controller: TaskController, action: showAction, id: 1
configuración
Symfony 2 y su ecosistema
Doctrine 2
Conjunto de librerías PHP que nos proporciona servicios de persistencia
23 Symfony 2 y su ecosistema
Doctrine 2
https://github.com/doctrine/doctrine2
24
Doctrine Common
Symfony 2 y su ecosistema
- Extensiones al core de PHP (Colecciones, Anotaciones, Cache, ...)
Doctrine 2
https://github.com/doctrine/doctrine2
25
Doctrine Common
Doctrine DBAL - Manipulación de la estructura de bbdd. - Abstracción del tipo de bbdd (IMBDB2, PDOIbm, PDOMySQL, PDOOracle, PDOSqlite, …).
Symfony 2 y su ecosistema
- Extensiones al core de PHP (Colecciones, Anotaciones, Cache, ...)
Doctrine 2
https://github.com/doctrine/doctrine2
26
Doctrine Common
Doctrine DBAL
Doctrine ORM
- Extensiones al core de PHP (Colecciones, Anotaciones, Cache, ...)
- Manipulación de la estructura de bbdd. - Abstracción del tipo de bbdd (IMBDB2, PDOIbm, PDOMySQL, PDOOracle, PDOSqlite, …).
- Ofrece persistencia transparente a los objetos de PHP. - Doctrine Query Language (DQL) nos abstrae el mapeo entre las columnas y tablas de la bbdd y los objetos.
Symfony 2 y su ecosistema
Doctrine 2 ORM
Active Record vs DataMapper
27
Tarea
nombre
descripción
elementos
save()
delete()
update()
Symfony 2 y su ecosistema
Doctrine 2 ORM
Active Record vs DataMapper
28
Tarea
nombre
descripción
elementos
save()
delete()
update()
$tarea = new Tarea(); $tarea->setNombre(..) $tarea->save() $tarea->delete()
Symfony 2 y su ecosistema
Doctrine 2 ORM
Active Record vs DataMapper
29
Tarea
nombre
descripción
elementos
save()
delete()
update()
$tarea = new Tarea(); $tarea->setNombre(..) $tarea->save() $tarea->delete()
Tarea
nombre
descripción
elementos
Symfony 2 y su ecosistema
Doctrine 2 ORM
Active Record vs DataMapper
30
Tarea
nombre
descripción
elementos
save()
delete()
update()
$tarea = new Tarea(); $tarea->setNombre(..) $tarea->save() $tarea->delete()
Tarea
nombre
descripción
elementos
$tarea = new Tarea(); $tarea->setNombre(...) $em->persist($tarea) $em->remove($tarea) $em->flush()
Symfony 2 y su ecosistema
Doctrine 2 ORM
Entity Manager
31
Es el punto de acceso a las funcionalidad del ORM y el el encargado de persistir las entidades.
persist ($entity) remove ($entity)
flush()
Symfony 2 y su ecosistema
Doctrine 2 ORM
Entity Respository
32
Colección de entidades de un mismo tipo. Es el encargado de separar la lógica de Doctrine de tu modelo.
findAll () findBy (array)
findOneBy(array) …
Symfony 2 y su ecosistema
Doctrine 2 ORM
DQL
33
Lenguaje de búsquedas para tu modelo de objetos. SELECT t FROM Codemotion\Model\Task t WHERE t.horas > 2
Symfony 2 y su ecosistema
Doctrine 2 ORM
DQL
34
Lenguaje de búsquedas para tu modelo de objetos. SELECT t FROM Codemotion\Model\Task t WHERE t.horas > 2
Query Builder
$qb->add('select', ‘t') -> add('from', Codemotion\Model\Task t') ->
add('where', ‘t.horas > 2');
Symfony 2 y su ecosistema
Doctrine 2 ORM
Comandos
35
Doctrine ORM viene con un conjunto de herramientas que nos simplifica enormemente el trabajo con la bbdd.
orm:validate-schema orm:schema-tool:update | create | drop
orm:generate-entities …
Symfony 2 y su ecosistema
Doctrine 2 ORM
Documentación
36
http://www.doctrine-project.org/
Symfony 2 y su ecosistema
Twig
https://github.com/fabpot/Twig
Twig es un sistema de plantillas para PHP muy conciso, flexible y con una sintaxis orientada a plantillas
http://twig.sensiolabs.org/
37 Symfony 2 y su ecosistema
Twig
CONCISO
38
<?php echo $tarea->getNombre() ?>
<?php echo $hoy->format(‘Y-m-d’); ?>
Symfony 2 y su ecosistema
Twig
CONCISO
39
<?php echo $tarea->getNombre() ?> {{ tarea.nombre }}
<?php echo $hoy->format(‘Y-m-d’); ?> {{ hoy|date(‘Y-m-d’) }}
Symfony 2 y su ecosistema
Twig
40
SINTAXIS ORIENTADA A PLANTILLAS
<?php if ($tareas): ?>
<?php foreach ($tareas as $tarea): ?>
* <?php echo $tarea->getNombre(); ?>
<?php endforeach; ?>
<?php else: ?>
No hay tareas disponibles
<?php endif; ?>
Symfony 2 y su ecosistema
Twig
41
SINTAXIS ORIENTADA A PLANTILLAS
<?php if ($tareas): ?>
<?php foreach ($tareas as $tarea): ?>
* <?php echo $tarea->getNombre(); ?>
<?php endforeach; ?>
<?php else: ?>
No hay tareas disponibles
<?php endif; ?>
{% for tarea in tareas %}
* {{ tarea.nombre }}
{% else %}
No hay tareas disponibles
{% endfor %}
Symfony 2 y su ecosistema
Twig
42
Flexible
Permite a los desarrolladores definirse cualquier tag, filtro, función, …
http://twig.sensiolabs.org/doc/api.html http://twig.sensiolabs.org/doc/extensions.html
Symfony 2 y su ecosistema
Dependency Injection
43
https://github.com/symfony/DependencyInjection
Estandariza y centraliza la manera en la que se crean los objetos de tu aplicación
Symfony 2 y su ecosistema
Dependency Injection
44
Pero, …¿ Qué es una inyección de dependencias?
Symfony 2 y su ecosistema
Dependency Injection
45
Pero, …¿ Qué es una inyección de dependencias?
$gestorTareas = new GestorTareas($em);
Symfony 2 y su ecosistema
Dependency Injection
46
Pero, …¿ Qué es una inyección de dependencias?
$gestorTareas = new GestorTareas($em);
$gestorTareas = new GestorTareas(); $gestorTareas->setEntityManager($em);
Symfony 2 y su ecosistema
Dependency Injection Container (DIC)
47
DIC
Reglas de creación
de objetos
Symfony 2 y su ecosistema
Dependency Injection Container (DIC)
48
DIC
Reglas de creación
de objetos
get(‘gestor_tareas’)
Symfony 2 y su ecosistema
Dependency Injection Container (DIC)
49
DIC
Reglas de creación
de objetos
get(‘gestor_tareas’) “gestor_tareas” depende de
“entity_manager”
Symfony 2 y su ecosistema
Dependency Injection Container (DIC)
50
DIC
Reglas de creación
de objetos
get(‘gestor_tareas’)
$em = $container->get(‘entity_manager’); $gestorTareas = new GestorTareas($em) return $gestorTareas;
“gestor_tareas” depende de “entity_manager”
Symfony 2 y su ecosistema
Dependency Injection Container (DIC)
51
DIC
Reglas de creación
de objetos
$gestorTareas get(‘gestor_tareas’)
$em = $container->get(‘entity_manager’); $gestorTareas = new GestorTareas($em) return $gestorTareas;
“gestor_tareas” depende de “entity_manager”
Symfony 2 y su ecosistema
http://github.com/javiacei/codemotion-sf2
52 Symfony 2 y su ecosistema
Gracias.
53 Symfony 2 y su ecosistema
[email protected] twitter.com/javiacei
http://es.linkedin.com/pub/francisco-javier-aceituno-lapido/32/313/94b