trabalhando com eventos e serviços no zend framework 2
TRANSCRIPT
![Page 1: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/1.jpg)
![Page 2: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/2.jpg)
2
# whoami
William Felipe Welter
● Líder das equipes de PHP e PostgreSQL na 4Linux
● Bacharel em Ciência da Computação
● Experiencia com desenvolvimento e infraestrutura
![Page 3: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/3.jpg)
3
Eventos e Serviços no ZF2
![Page 4: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/4.jpg)
4
Introdução ao ZF2
Modular
Eventos Serviços IoCDependency Injection
Composição Vs Herança
DesacoplamentoDesacoplamento PubSub
SubjectObserver
Escalabilidade
![Page 5: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/5.jpg)
5
Eventos
● Implementado pela classe “EventManager”
● É utilizado extensivamente no framework
● Permite utilizar o paradigma Pub Sub e Subject Observer
● Desacoplamento e independência entre módulos
![Page 6: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/6.jpg)
6
Eventos
Como funcionam ?
![Page 7: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/7.jpg)
7
Listeners
![Page 8: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/8.jpg)
8
Listeners
● Qualquer tipo de “invokables” atrelado a um
evento
● “EventManager::attach()”
![Page 9: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/9.jpg)
9
Triggers
![Page 10: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/10.jpg)
10
Triggers
● Dispara um evento.
● EventManager::trigger()
![Page 11: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/11.jpg)
11
Show me the code !
![Page 12: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/12.jpg)
12
Eventos
Porque utilizar eventos ?
![Page 13: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/13.jpg)
13
Eventos
● Comunicação entre módulos
● Executar rotinas não relacionadas a classe
● Tratar o comportamento do framework
![Page 14: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/14.jpg)
14
Eventos
Comunicação entre módulos
● Suponha que criamos um módulo de “gamification”
● Nossa aplicação precisa utilizar este modulo para:
● Pontuar usuários
● Gerar badges
● Como “consumir” o modulo de “gamefication” sem torná-lo uma
dependência ?
![Page 15: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/15.jpg)
15
Eventos
Rotinas não relacionadas a classe
● Suponha que temos uma classe de modelo para realizar pagamentos
de uma loja virtual.
● Nossa classe possui um método “pagarParcelado()” que precisa:
● Avaliar se valor das parcelas estão de acordo com as regras
● Se o produto pode ser parcelado
● Efetuar o pagamento
● Imagine que seu chefe solicitou que seja implementada um avaliação
de risco, o que você faria ?
![Page 16: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/16.jpg)
16
Eventos
Tratar comportamento do framework
● Alterar layout baseado na rota
● Verificar permissões do usuário antes de executar um “action”
● Injetar informações de debug no layout
● Cachear “views”.
![Page 17: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/17.jpg)
17
Eventos
Onde registrar listeners ?
![Page 18: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/18.jpg)
18
Eventos
● Classe Module
● Método onBootstrap()
![Page 19: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/19.jpg)
19
Show me the code !
![Page 20: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/20.jpg)
20
Eventos
O que é o SharedEventManager ?
![Page 21: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/21.jpg)
21
Eventos
● Mecanismo que “interliga” instancias do
“EventManager”
● Permite tratar eventos de diferentes instancias.
● Não deve ser instanciado!
● Obtenha a partir de qualquer EventManager
através do método “getSharedManager()”
![Page 22: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/22.jpg)
22
Show me the code !
![Page 23: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/23.jpg)
23
Show me the code !
![Page 24: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/24.jpg)
24
Eventos
E se eu tiver mais de um listener para um evento?
![Page 25: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/25.jpg)
25
Quem “chega” primeiro ?
![Page 26: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/26.jpg)
26
Eventos
Na ordem que foram registrados, ou..
![Page 27: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/27.jpg)
27
Eventos
● Defina prioridades
● Ultimo parâmetro
● Maior o numero, mais
tarde é executado.
● Padrão é 1
![Page 28: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/28.jpg)
28
Show me the code!
![Page 29: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/29.jpg)
29
Eventos
Posso barrar a propagação de um evento ?
![Page 30: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/30.jpg)
30
Curto circuito
![Page 31: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/31.jpg)
31
Eventos
● Listeners podem fazer “curto circuito” através
do método “stopPropagation()”
● Pode se criar uma função de avaliação de
retorno na trigger que decide sobre a
propagação.
![Page 32: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/32.jpg)
32
Show me the code !
![Page 33: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/33.jpg)
33
Show me the code !
![Page 34: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/34.jpg)
34
Eventos
E se eu tiver muitos listeners ?
![Page 35: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/35.jpg)
35
Eventos
● Agrupe através de um “AggregateListener”
![Page 36: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/36.jpg)
36
Show me the code !
![Page 37: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/37.jpg)
37
Show me the code !
![Page 38: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/38.jpg)
38
Eventos
Eventos disparados pelo MVC
![Page 39: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/39.jpg)
39
Eventos
BOOTSTRAP
● Tratamento da requisição● Valida rota disponível● Mapeia controller/action
ROUTE DISPATCH RENDER
DISPATCH_ERROR
FINISH
RENDER_ERROR
● Instancia a controller● Executa a action
● Renderiza a view● Disparado após a renderização da view
● Inicializa o MVC
![Page 40: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/40.jpg)
40
Serviços
![Page 41: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/41.jpg)
41
Serviços
● Implementado pela classe “ServiceManager”
● É utilizado extensivamente no framework
● Injeção de dependências
● Permite utilizar o paradigma IoC
● Composição VS herança
● Uma instancia por serviço
![Page 42: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/42.jpg)
42
Serviços
Como funcionam ?
![Page 43: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/43.jpg)
43
Definir um serviço
![Page 44: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/44.jpg)
44
Serviços
● Através do método “setService()”
● Através do arquivo de configuração do modulo
“module.config.php”
● Chave “service_manager”.
![Page 45: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/45.jpg)
45
Show me the code !
![Page 46: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/46.jpg)
46
Show me the code !
![Page 47: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/47.jpg)
47
Obtendo um serviço
![Page 48: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/48.jpg)
48
Serviços
● Através do método get()
● ServiceManager disponível na Controller.
![Page 49: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/49.jpg)
49
Show me the code !
![Page 50: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/50.jpg)
50
Serviços
Onde devo registrar meus serviços ?
![Page 51: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/51.jpg)
51
Serviços
● module.config.php
● Chave:
“service_manager”
![Page 52: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/52.jpg)
52
Serviços
Tipos de serviços
![Page 53: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/53.jpg)
53
Invokables
![Page 54: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/54.jpg)
54
Serviços
● Pode-se utilizar qualquer tipo “invokable” do
PHP
● Classes que não possuem dependência no seu
construtor.
● Útil para definir serviços que serão utilizados
como dependências de outros serviços.
![Page 55: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/55.jpg)
55
Show me the code !
![Page 56: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/56.jpg)
56
Show me the code !
![Page 57: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/57.jpg)
57
Factories
![Page 58: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/58.jpg)
58
Serviços
● Fabricar uma instancia de uma classe
● Injetar dependências presentes no construtor.
● Útil para compor dependências
● Closure
● Implementação da “FactoryInterface”
![Page 59: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/59.jpg)
59
Show me the code !
![Page 60: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/60.jpg)
60
Show me the code !
![Page 61: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/61.jpg)
61
Show me the code !
![Page 62: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/62.jpg)
62
Closure no config.module.php
![Page 63: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/63.jpg)
63
Warning !
● Não utilize closures no arquivo de configuração
● Inviabiliza use de cache
● Este arquivo deve ter configuração !
![Page 64: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/64.jpg)
64
Show me the code !
![Page 65: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/65.jpg)
65
Show me the code !
![Page 66: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/66.jpg)
66
Initializers
![Page 67: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/67.jpg)
67
Serviços
● Inicializa serviço do tipo “Invokable”
● Injetar dependências
● Útil quando se tem vários serviços com uma
dependência em comum.
![Page 68: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/68.jpg)
68
Show me the code !
![Page 69: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/69.jpg)
69
Show me the code !
![Page 70: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/70.jpg)
70
Show me the code !
![Page 71: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/71.jpg)
71
Serviços
Porque utilizar serviços ?
![Page 72: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/72.jpg)
72
Serviços
● Use serviços para injetar dependências
● Obter models em controllers
● Evitar herança e diminuir acoplamento.
![Page 73: Trabalhando com eventos e serviços no Zend Framework 2](https://reader034.vdocuments.mx/reader034/viewer/2022052304/55aab9781a28abaf3b8b4827/html5/thumbnails/73.jpg)
73
Perguntas ?