desymfony 2012 - concierto de eventos

59
1 desymfony 2012 - Concierto de eventos

Upload: eduardo-gulias

Post on 20-Jun-2015

3.195 views

Category:

Technology


0 download

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-eventos

TRANSCRIPT

Page 1: deSymfony 2012 - Concierto de Eventos

1 desymfony 2012 - Concierto de eventos

Page 2: deSymfony 2012 - Concierto de Eventos

2 desymfony 2012 - Concierto de eventos

Page 3: deSymfony 2012 - Concierto de Eventos

3

Page 4: deSymfony 2012 - Concierto de Eventos

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

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

6 desymfony 2012 - Concierto de eventos

Page 7: 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

Page 8: deSymfony 2012 - Concierto de Eventos

8 desymfony 2012 - Concierto de eventos

Page 9: deSymfony 2012 - Concierto de Eventos

9 desymfony 2012 - Concierto de eventos

Page 10: deSymfony 2012 - Concierto de Eventos

¿Qué queremos ahora?

10 desymfony 2012 - Concierto de eventos

Page 11: 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

Page 12: deSymfony 2012 - Concierto de Eventos

12 desymfony 2012 - Concierto de eventos

Page 13: deSymfony 2012 - Concierto de Eventos

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

Introducir el código de github dentro de la librería

14 desymfony 2012 - Concierto de eventos

Page 15: deSymfony 2012 - Concierto de Eventos

Introducir el código de github dentro de la librería

15 desymfony 2012 - Concierto de eventos

Page 16: deSymfony 2012 - Concierto de Eventos

Introducir el código de github dentro de la librería

16 desymfony 2012 - Concierto de eventos

Page 17: deSymfony 2012 - Concierto de Eventos

Introducir el código de github dentro de la librería

17 desymfony 2012 - Concierto de eventos

Page 18: deSymfony 2012 - Concierto de Eventos

Permitir modificar el usuario antes de guardarse

18 desymfony 2012 - Concierto de eventos

Page 19: deSymfony 2012 - Concierto de Eventos

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

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

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

22 desymfony 2012 - Concierto de eventos

Page 23: deSymfony 2012 - Concierto de Eventos

23

Gestor Usuarios (sujeto)

Rastreador Github

(observador)

github

desymfony 2012 - Concierto de eventos

Page 24: deSymfony 2012 - Concierto de Eventos

24

Gestor Usuarios (sujeto)

Rastreador Github

(observador)

github

desymfony 2012 - Concierto de eventos

Page 25: deSymfony 2012 - Concierto de Eventos

25

Gestor Usuarios (sujeto)

Rastreador Github

(observador)

github

desymfony 2012 - Concierto de eventos

Page 26: deSymfony 2012 - Concierto de Eventos

26

Gestor Usuarios (sujeto)

Rastreador Github

(observador)

github

usuario

desymfony 2012 - Concierto de eventos

Page 27: deSymfony 2012 - Concierto de Eventos

27

Gestor Usuarios (sujeto)

Rastreador Github

(observador)

github

usuario

desymfony 2012 - Concierto de eventos

Page 28: 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

Page 29: deSymfony 2012 - Concierto de Eventos

Implementa el patrón observador de manera simple y efectiva.

29 desymfony 2012 - Concierto de eventos

Page 30: 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

Page 31: deSymfony 2012 - Concierto de Eventos

31

Gestor Usuarios

Rastreador Github

(Listener)

github

Event Dispatcher

desymfony 2012 - Concierto de eventos

Page 32: deSymfony 2012 - Concierto de Eventos

32

Gestor Usuarios

Rastreador Github

(Listener)

github

Event Dispatcher

desymfony 2012 - Concierto de eventos

Page 33: deSymfony 2012 - Concierto de Eventos

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

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

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

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

Event Dispatcher

HttpKernel

Page 38: deSymfony 2012 - Concierto de Eventos

kernel.exception kernel.request ...

HttpKernelEvent

• getRequestType()

• getKernel()

• getRequest()

Page 39: deSymfony 2012 - Concierto de Eventos

kernel.controller

kernel.request

kernel.view

kernel.response

kernel.exception

Page 40: deSymfony 2012 - Concierto de Eventos

kernel.controller

kernel.request

kernel.view

kernel.response

kernel.exception

1

Page 41: deSymfony 2012 - Concierto de Eventos

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

kernel.controller

kernel.request

kernel.view

kernel.response

kernel.exception

1

2

Page 43: deSymfony 2012 - Concierto de Eventos

Nos permite modificar el controlador establecido en kernel.request

Page 44: deSymfony 2012 - Concierto de Eventos

kernel.controller

kernel.request

kernel.view

kernel.response

kernel.exception

3

2

1

Page 45: deSymfony 2012 - Concierto de Eventos

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

kernel.controller

kernel.request

kernel.view

kernel.response

kernel.exception

3

2

1

4

Page 47: deSymfony 2012 - Concierto de Eventos

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

kernel.controller

kernel.request

kernel.view

kernel.response

kernel.exception

3

2

1

4

5

Page 49: deSymfony 2012 - Concierto de Eventos

Sólo es llamado si hay una excepción

Page 50: deSymfony 2012 - Concierto de Eventos

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

51

Page 52: deSymfony 2012 - Concierto de Eventos

• Prioridad de los listeners

• Frenar la propagación

52

Page 53: deSymfony 2012 - Concierto de Eventos

• Master & Sub Request

• Listeners.xml

• app/console container:debug

53

Page 54: deSymfony 2012 - Concierto de Eventos

1. Listeners

2. Miiii Eveeeentooooo

54 desymfony 2012 - Concierto de eventos

Page 55: deSymfony 2012 - Concierto de Eventos
Page 56: 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!

Page 57: deSymfony 2012 - Concierto de Eventos

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

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

desymfony 2012 - Concierto de eventos 59