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
1 desymfony 2012 - Concierto de eventos
2 desymfony 2012 - Concierto de eventos
3
1. Escenario principal
2. El patrón observador
3. El Event Dispatcher
4. Los Eventos en Symfony 2
4 desymfony 2012 - Concierto de eventos
1. Escenario principal 2. El patrón observador
3. El Event Dispatcher
4. Los Eventos en Symfony 2
5 desymfony 2012 - Concierto de eventos
6 desymfony 2012 - Concierto de eventos
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
8 desymfony 2012 - Concierto de eventos
9 desymfony 2012 - Concierto de eventos
¿Qué queremos ahora?
10 desymfony 2012 - Concierto de eventos
¿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
12 desymfony 2012 - Concierto de eventos
Si guardamos el usuario desde otro lugar tenemos que duplicar el código.
13 desymfony 2012 - Concierto de eventos
Introducir el código de github dentro de la librería
14 desymfony 2012 - Concierto de eventos
Introducir el código de github dentro de la librería
15 desymfony 2012 - Concierto de eventos
Introducir el código de github dentro de la librería
16 desymfony 2012 - Concierto de eventos
Introducir el código de github dentro de la librería
17 desymfony 2012 - Concierto de eventos
Permitir modificar el usuario antes de guardarse
18 desymfony 2012 - Concierto de eventos
Permitir modificar el usuario antes de guardarse
pero …, ¿cómo hacemos eso?
19 desymfony 2012 - Concierto de eventos
Permitir modificar el usuario antes de guardarse
pero …, ¿cómo hacemos eso?
Patrón observador
20 desymfony 2012 - Concierto de eventos
1. Escenario principal
2. El patrón observador 3. El Event Dispatcher
4. Los Eventos en Symfony 2
21 desymfony 2012 - Concierto de eventos
22 desymfony 2012 - Concierto de eventos
23
Gestor Usuarios (sujeto)
Rastreador Github
(observador)
github
desymfony 2012 - Concierto de eventos
24
Gestor Usuarios (sujeto)
Rastreador Github
(observador)
github
desymfony 2012 - Concierto de eventos
25
Gestor Usuarios (sujeto)
Rastreador Github
(observador)
github
desymfony 2012 - Concierto de eventos
26
Gestor Usuarios (sujeto)
Rastreador Github
(observador)
github
usuario
desymfony 2012 - Concierto de eventos
27
Gestor Usuarios (sujeto)
Rastreador Github
(observador)
github
usuario
desymfony 2012 - Concierto de eventos
1. Escenario principal
2. El patrón observador
3. El Event Dispatcher 4. Los Eventos en Symfony 2
28 desymfony 2012 - Concierto de eventos
Implementa el patrón observador de manera simple y efectiva.
29 desymfony 2012 - Concierto de eventos
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
31
Gestor Usuarios
Rastreador Github
(Listener)
github
Event Dispatcher
desymfony 2012 - Concierto de eventos
32
Gestor Usuarios
Rastreador Github
(Listener)
github
Event Dispatcher
desymfony 2012 - Concierto de eventos
33
Gestor Usuarios
Rastreador Github
(Listener)
github
Event Dispatcher
antes_crear_usuario
Event usuario
desymfony 2012 - Concierto de eventos
34
Gestor Usuarios
Rastreador Github
(Listener)
github
Event Dispatcher
antes_crear_usuario
Event usuario
desymfony 2012 - Concierto de eventos
35
Gestor Usuarios
Rastreador Github
(Listener)
github
Event Dispatcher
antes_crear_usuario
Event usuario
desymfony 2012 - Concierto de eventos
1. Escenario principal
2. El patrón observador
3. El Event Dispatcher
4. Los Eventos en Symfony 2
36 desymfony 2012 - Concierto de eventos
Event Dispatcher
HttpKernel
kernel.exception kernel.request ...
HttpKernelEvent
• getRequestType()
• getKernel()
• getRequest()
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
1
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
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
1
2
Nos permite modificar el controlador establecido en kernel.request
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
3
2
1
Sólo es llamado si el controlador no devuelve un objeto Response
Nos permite crear un sub sistema de vistas
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
3
2
1
4
Nos permite modificar el objeto Response devuelto por el controlador
El FrameworkBundle implementa varios listeners ProfilerListener WebDebugToolbarListener ResponseListener EsiListener
kernel.controller
kernel.request
kernel.view
kernel.response
kernel.exception
3
2
1
4
5
Sólo es llamado si hay una excepción
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
51
• Prioridad de los listeners
• Frenar la propagación
52
• Master & Sub Request
• Listeners.xml
• app/console container:debug
53
1. Listeners
2. Miiii Eveeeentooooo
54 desymfony 2012 - Concierto de eventos
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!
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
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
desymfony 2012 - Concierto de eventos 59