Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

34
Hooks, plugins, eventos e serviços, como usar tudo isso no Drupal 8? Felipe Ribeiro Desenvolvedor Sr. CI&T

Transcript of Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Page 1: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Hooks, plugins, eventos e serviços, como usar tudo isso no Drupal 8?

Felipe Ribeiro

Desenvolvedor Sr.CI&T

Page 2: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Felipe Ribeiro (felribeiro)

Desenvolvo com drupal há 5 anosTrabalho na CI&T como desenvolvedor drupal sênior.

Page 3: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

- Alterar, estender e incrementar o Drupal

- Plugins, Serviços, Eventos e Hooks

- Exemplos de cada um deles

- Como escolher a ferramenta certa

O que veremos?

Page 4: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Não hackeie o core e módulos.

Page 5: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Não hackeie, use uma hook, escreva um plugin, crie um serviço ou

responda a um evento.

Page 6: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Permita que outras pessoas consigam alterar seu módulo sem

precisar hackeá-lo.

Page 7: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Plugins

Page 8: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Plugins

- Prove uma funcionalidade configurável, de maneira que permita, ao sistema ou ao usuário final, escolher um item ou mais de uma lista.

- Auxilia no aprendizado do desenvolvedor

- Todo código em um só lugar

Page 9: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Exemplos de Plugins- Blocks

- Field types

- Field formatters

- Views styles

- Actions

Page 10: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Receita de Plugin1 - Determine o tipo de plugin- Onde a meta-data e o código vão?

2 - Existe uma classe base para estender?

3 - Implemente uma interface e coloque a meta-data, para que o plugin manager possa achar a sua instância

Page 11: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?
Page 12: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Receita de Tipos de Plugin- Plugins que que tem funcionalidades similares

são do mesmo plugin type

- Você pode implementar seu próprio tipo de plugin, veja DefaultPluginManager

Page 13: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Alguns links sobre Plugins

https://www.drupal.org/developing/api/8/plugins

https://drupalize.me/blog/201407/drupal-8-plugins-explained

https://drupalize.me/blog/201409/unravelling-drupal-8-plugin-system

Page 14: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Serviços

Page 15: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Serviços são muito interessantes

- Eles são dissociados do Drupal

- Serviços podem ser trocados

- Fácil de testar

- Ótima reusabilidade

Page 16: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Exemplos de Serviços- Acesso ao Cache e Banco de Dados

- Plugin Manager, disparo de Eventos

- Integrações com API

- Manipulador de validações

Page 17: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

https://api.drupal.org/api/drupal/services/8.2.x

Page 18: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Receita de Serviço1. Escolha um nome único. Dica: Use o nome do módulo como

prefixo, ‘mymodule.service_name’

2. Defina uma interface, e a implemente

3. Registre o serviço no arquivo mymodule.services.yml

4. Acesse o serviço via container usando o nome único \Drupal::service('mymodule.service_name')

Page 19: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Links sobre Serviços

https://www.drupal.org/node/2133171

https://api.drupal.org/api/drupal/core%21core.api.php/ group/container/8.2.x

https://drupalize.me/series/module-development-essentials

Page 20: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Eventos

Page 21: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Eventos

- Reagir a uma ação/condição da aplicação, sem modificá-la

- Eventos são práticas comuns em OOP, já as hooks são mais Drupalistas

Page 22: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Receita de Eventos - Assinatura1. Determine o nome do evento

https://api.drupal.org/api/drupal/core%21core.api.php/group/events/8.2.x

2. Define um apelido para o serviço

Page 23: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Receita de Eventos - Assinatura3. Implemente \Symfony\Component\EventDispatcher \EventSubscriberInterface em \Drupal \mymodule\EventSubscriber namespace

Page 24: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Receita de Eventos - Disparo1. Adicione uma classe em Drupal/my_module/Events namespace.

2. A classe deve extender \Symfony\Component\EventDispatcher\Event, que irá prover informações adicionais ao evento

3. Use \Drupal\Component\EventDispatcher \ContainerAwareEventDispatcher::dispatch();

e passe o nome do evento e o objeto da classe criada.

Page 25: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Links sobre Eventos

https://drupalize.me/blog/201502/responding-events-drupal-8

http://symfony.com/doc/current/components/event_dispatcher /introduction.html

https://drupalize.me/series/module-development-essentials

https://api.drupal.org/api/drupal/core%21core.api.php/group /events/8

Page 26: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Hooks

Page 27: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Hooks- Nas versões anteriores do Drupal, muitas coisas eram feiras

com hook

- É bom para alterar dados existentes

- Rápido!

- Quando o Drupal começou a utilizar hooks (2001), era a melhor solução da época

Page 28: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Exemplos de Hooks

- Alterar formulário, hook_form_alter().

- Modificar meta-data de um campo/entidade, hook_field_info()

- Drupal 7

Page 29: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Receita de Hook1. Determine o nome da hook que vai implementar

Ex: hook_form_alter()

2. Adicione uma função no seu arquivo .module com o nome da hook, substitua “hook” pelo nome do seu módulo

Ex: example_form_alter()

3. Implemente de acordo com a documentação

4. Limpe o cache (nem sempre necessário)

Page 30: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Receita de Hooks - Chamar1. Pegue o nome único da sua hook

2. Use \Drupal\Core\Extension\ModuleHandlerInterfacemétodos

Page 31: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Links sobre Hooks

{MODULE_NAME}.api.php

https://api.drupal.org/api/drupal/core%21core.api.php /group/hooks/8.2.x

Page 32: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Hooks ou Eventos?

Page 33: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

Vídeo upload moduleUsando plugin para você poder escolher onde o vídeo vai ser hospedado.

Usando serviço para enviar o vídeo

Usando serviço para interagir com cada api (youtube, brightcove, etc)

Disparando eventos para que outros módulos possam interagirEx: Dispara um evento quando o vídeo termina de carregar

Chama uma hook alter para permitir que outros módulos possam alterar as configurações dos vídeos.

Ex: Mudar a qualidade do vídeo

Page 34: Hooks, plugins, eventos e serviços, como usar tudo isso no drupal 8?

ObrigadoFelipe RibeiroEmail: [email protected]