Documentação do Symfony - versão 3.1
Renderizada do repositório symfony-docs-pt-BR no Github
Se você deseja realizar algo logo antes ou após um método ser chamado, você pode despachar um evento, respectivamente, no início ou no fim do método:
class Foo
{
// ...
public function send($foo, $bar)
{
// do something before the method
$event = new FilterBeforeSendEvent($foo, $bar);
$this->dispatcher->dispatch('foo.pre_send', $event);
// get $foo and $bar from the event, they may have been modified
$foo = $event->getFoo();
$bar = $event->getBar();
// the real method implementation is here
$ret = ...;
// do something after the method
$event = new FilterSendReturnValue($ret);
$this->dispatcher->dispatch('foo.post_send', $event);
return $event->getReturnValue();
}
}
Neste exemplo, dois eventos são lançados: foo.pre_send
, antes do método ser
executado, e foo.post_send
após o método ser executado. Cada um usa uma
classe Event
personalizada para comunicar informações para os ouvintes dos dois
eventos. Essas classes de evento teriam que ser criadas por você e, devem permitir,
neste exemplo, que as variáveis $foo
, $bar
e $ret
sejam recuperadas
e definidas pelos ouvintes.
Por exemplo, supondo que o FilterSendReturnValue
tem um método setReturnValue
,
um ouvinte pode ter o seguinte aspecto:
1 2 3 4 5 6 7 | public function onFooPostSend(FilterSendReturnValue $event)
{
$ret = $event->getReturnValue();
// modify the original ``$ret`` value
$event->setReturnValue($ret);
}
|