desymfony 2012 - concierto de eventos
DESCRIPTION
Charla sobre Eventos de deSymfony 2012 de @egulias y @javiacei. Puedes ver el video en http://youtu.be/03tpUS0OaeY. Desde los eventos de Symfony 2 (kernel.*) hasta lanzar nuestro propio evento. Para ver el código final de la charla: https://github.com/egulias/desymfony2012-concierto-de-eventosTRANSCRIPT
![Page 1: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/1.jpg)
1 desymfony 2012 - Concierto de eventos
![Page 2: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/2.jpg)
2 desymfony 2012 - Concierto de eventos
![Page 3: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/3.jpg)
3
![Page 4: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/4.jpg)
1. Escenario principal
2. El patrón observador
3. El Event Dispatcher
4. Los Eventos en Symfony 2
4 desymfony 2012 - Concierto de eventos
![Page 5: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/5.jpg)
1. Escenario principal 2. El patrón observador
3. El Event Dispatcher
4. Los Eventos en Symfony 2
5 desymfony 2012 - Concierto de eventos
![Page 6: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/6.jpg)
6 desymfony 2012 - Concierto de eventos
![Page 7: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/7.jpg)
7 desymfony 2012 - Concierto de eventos
Creamos librería para gestionar los usuarios Esto nos permitirá reutilizar la gestión de usuarios para
todos nuestros proyectos
![Page 8: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/8.jpg)
8 desymfony 2012 - Concierto de eventos
![Page 9: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/9.jpg)
9 desymfony 2012 - Concierto de eventos
![Page 10: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/10.jpg)
¿Qué queremos ahora?
10 desymfony 2012 - Concierto de eventos
![Page 11: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/11.jpg)
¿Qué queremos ahora?
A la hora de guardar el usuario, si este tiene perfil en Github, localizar y guardar información adicional del usuario.
11 desymfony 2012 - Concierto de eventos
![Page 12: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/12.jpg)
12 desymfony 2012 - Concierto de eventos
![Page 13: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/13.jpg)
Si guardamos el usuario desde otro lugar tenemos que duplicar el código.
13 desymfony 2012 - Concierto de eventos
![Page 14: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/14.jpg)
Introducir el código de github dentro de la librería
14 desymfony 2012 - Concierto de eventos
![Page 15: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/15.jpg)
Introducir el código de github dentro de la librería
15 desymfony 2012 - Concierto de eventos
![Page 16: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/16.jpg)
Introducir el código de github dentro de la librería
16 desymfony 2012 - Concierto de eventos
![Page 17: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/17.jpg)
Introducir el código de github dentro de la librería
17 desymfony 2012 - Concierto de eventos
![Page 18: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/18.jpg)
Permitir modificar el usuario antes de guardarse
18 desymfony 2012 - Concierto de eventos
![Page 19: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/19.jpg)
Permitir modificar el usuario antes de guardarse
pero …, ¿cómo hacemos eso?
19 desymfony 2012 - Concierto de eventos
![Page 20: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/20.jpg)
Permitir modificar el usuario antes de guardarse
pero …, ¿cómo hacemos eso?
Patrón observador
20 desymfony 2012 - Concierto de eventos
![Page 21: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/21.jpg)
1. Escenario principal
2. El patrón observador 3. El Event Dispatcher
4. Los Eventos en Symfony 2
21 desymfony 2012 - Concierto de eventos
![Page 22: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/22.jpg)
22 desymfony 2012 - Concierto de eventos
![Page 23: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/23.jpg)
23
Gestor Usuarios (sujeto)
Rastreador Github
(observador)
github
desymfony 2012 - Concierto de eventos
![Page 24: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/24.jpg)
24
Gestor Usuarios (sujeto)
Rastreador Github
(observador)
github
desymfony 2012 - Concierto de eventos
![Page 25: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/25.jpg)
25
Gestor Usuarios (sujeto)
Rastreador Github
(observador)
github
desymfony 2012 - Concierto de eventos
![Page 26: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/26.jpg)
26
Gestor Usuarios (sujeto)
Rastreador Github
(observador)
github
usuario
desymfony 2012 - Concierto de eventos
![Page 27: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/27.jpg)
27
Gestor Usuarios (sujeto)
Rastreador Github
(observador)
github
usuario
desymfony 2012 - Concierto de eventos
![Page 28: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/28.jpg)
1. Escenario principal
2. El patrón observador
3. El Event Dispatcher 4. Los Eventos en Symfony 2
28 desymfony 2012 - Concierto de eventos
![Page 29: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/29.jpg)
Implementa el patrón observador de manera simple y efectiva.
29 desymfony 2012 - Concierto de eventos
![Page 30: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/30.jpg)
Event Evento que será lanzado por el sujeto a través del event dispatcher,
para informar de un cambio de estado en su interior.
Listener Elemento que será notificado cuando el evento sea lanzado.
Event Subscriber Mismo elemento que el listener, pero define internamente los
eventos que se encontrará escuchando en todo momento.
Dispatcher Objeto central del sistema de eventos que mantiene un registro de
todos los listeners, y que eventos tienen asociados cada uno de ellos.
30 desymfony 2012 - Concierto de eventos
![Page 31: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/31.jpg)
31
Gestor Usuarios
Rastreador Github
(Listener)
github
Event Dispatcher
desymfony 2012 - Concierto de eventos
![Page 32: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/32.jpg)
32
Gestor Usuarios
Rastreador Github
(Listener)
github
Event Dispatcher
desymfony 2012 - Concierto de eventos
![Page 33: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/33.jpg)
33
Gestor Usuarios
Rastreador Github
(Listener)
github
Event Dispatcher
antes_crear_usuario
Event usuario
desymfony 2012 - Concierto de eventos
![Page 34: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/34.jpg)
34
Gestor Usuarios
Rastreador Github
(Listener)
github
Event Dispatcher
antes_crear_usuario
Event usuario
desymfony 2012 - Concierto de eventos
![Page 35: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/35.jpg)
35
Gestor Usuarios
Rastreador Github
(Listener)
github
Event Dispatcher
antes_crear_usuario
Event usuario
desymfony 2012 - Concierto de eventos
![Page 36: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/36.jpg)
1. Escenario principal
2. El patrón observador
3. El Event Dispatcher
4. Los Eventos en Symfony 2
36 desymfony 2012 - Concierto de eventos
![Page 37: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/37.jpg)
Event Dispatcher
HttpKernel
![Page 38: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/38.jpg)
kernel.exception kernel.request ...
HttpKernelEvent
• getRequestType()
• getKernel()
• getRequest()
![Page 39: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/39.jpg)
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
![Page 40: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/40.jpg)
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
1
![Page 41: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/41.jpg)
Lo usa el FrameworkBundle mediante el RouterListener para crear el atributo _controller y definir el controlador que será llamado.
Podemos parar la propagación devolviendo un objeto Response
![Page 42: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/42.jpg)
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
1
2
![Page 43: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/43.jpg)
Nos permite modificar el controlador establecido en kernel.request
![Page 44: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/44.jpg)
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
3
2
1
![Page 45: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/45.jpg)
Sólo es llamado si el controlador no devuelve un objeto Response
Nos permite crear un sub sistema de vistas
![Page 46: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/46.jpg)
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
3
2
1
4
![Page 47: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/47.jpg)
Nos permite modificar el objeto Response devuelto por el controlador
El FrameworkBundle implementa varios listeners ProfilerListener WebDebugToolbarListener ResponseListener EsiListener
![Page 48: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/48.jpg)
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
3
2
1
4
5
![Page 49: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/49.jpg)
Sólo es llamado si hay una excepción
![Page 50: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/50.jpg)
Son clases normales definidos como servicios
Para los eventos del kernel, los registramos en la configuración del inyector.
Nos permiten realizar acciones durante los eventos
50 desymfony 2012 - Concierto de eventos
![Page 51: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/51.jpg)
51
![Page 52: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/52.jpg)
• Prioridad de los listeners
• Frenar la propagación
52
![Page 53: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/53.jpg)
• Master & Sub Request
• Listeners.xml
• app/console container:debug
53
![Page 54: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/54.jpg)
1. Listeners
2. Miiii Eveeeentooooo
54 desymfony 2012 - Concierto de eventos
![Page 55: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/55.jpg)
![Page 56: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/56.jpg)
desymfony 2012 - Concierto de eventos 56
egulias
Eduardo Gulias
egulias
• Desarrollador web desde 2006
• Coqueteando con Symfony (y otros frameworks) desde 2007
• Entusiasta de PHP y Symfony
• Miembro del grupo Symfony Madrid • Actualmente trabajando como lider de del
equipo Symfony de ideup!
![Page 57: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/57.jpg)
desymfony 2012 - Concierto de eventos 57
javiacei
Francisco Javier Aceituno
javiacei
• Ingeniero en Informática UPM 2010
• Loco por el mundo web y nuevas tecnología s
• Apasionado del universo PHP y Symfony
• Desarrollador de Software Libre
• Miembro del grupo Symfony Madrid
• Actualmente trabajando como Ingeniero del Software en Unidad Editorial
![Page 58: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/58.jpg)
Código de la presentación https://github.com/javiacei/desymfony2012-concierto-de-eventos
El Event Dispatcher http://symfony.com/doc/current/components/event_dispatcher/introduction.html
http://symfony.com/doc/current/book/internals.html
Trabajar usando el CompilerPass http://symfony.com/doc/master/cookbook/service_container/compiler_passes.html
http://symfony.com/doc/master/components/dependency_injection/compilation.html
Trabajando con servicios tageados http://symfony.com/doc/master/components/dependency_injection/tags.html
58 desymfony 2012 - Concierto de eventos
![Page 59: deSymfony 2012 - Concierto de Eventos](https://reader033.vdocuments.mx/reader033/viewer/2022052600/5584b0eed8b42a96768b4616/html5/thumbnails/59.jpg)
desymfony 2012 - Concierto de eventos 59