Event Manager w Zend Framework 3 jest narzędziem, które umożliwia programiście implementację wzorca projektowego Obserwator (Observer). Ten wzorzec pozwala na elastyczne rozwiązanie problemu powiadamiania różnych obiektów o zmianach zachodzących w innych obiektach.
Event Manager umożliwia łatwe zarządzanie zdarzeniami (eventami) w aplikacji, poprzez rejestrację i wywoływanie zarejestrowanych funkcji zwrotnych (callbacków) w odpowiedzi na określone zdarzenia. Funkcje te nazywane są słuchaczami (listeners) i są wywoływane w momencie wystąpienia zdarzenia, wraz z przekazaniem do nich obiektu zdarzenia i jego kontekstu.
Dzięki Event Managerowi w Zend Framework 3 programista może łatwo zaimplementować mechanizmy takie jak:
- Logowanie zdarzeń w aplikacji,
- Synchronizacja danych w różnych komponentach,
- Ostrzeganie użytkowników o zmianach w aplikacji,
- Dostosowywanie aplikacji do różnych warunków i preferencji użytkowników.
Event Manager pozwala również na hierarchiczne zarządzanie zdarzeniami, czyli przekazywanie zdarzeń z jednego poziomu aplikacji na kolejny, co ułatwia rozwijanie aplikacji o wiele komponentów i integrację z innymi systemami.
Przykład zastosowania Event Manager w Zend Framework 3 może być taki, że chcemy zaimplementować mechanizm logowania zdarzeń w naszej aplikacji. W tym celu możemy zarejestrować w Event Managerze nasz słuchacz, który będzie wywołany w momencie wystąpienia określonych zdarzeń, np. wysłania formularza lub zalogowania się użytkownika.
Poniżej przedstawiam przykładowy kod, który pokazuje, jak zarejestrować słuchacza w Event Managerze i jak wywołać zarejestrowaną funkcję zwrotną w momencie wystąpienia zdarzenia:
// Tworzymy obiekt event managera
$eventManager = new EventManager();
// Rejestrujemy nasz słuchacz do zdarzenia "submit"
$eventManager->attach('submit', function($event) {
$formData = $event->getParam('formData');
$username = $formData['username'];
$password = $formData['password'];
$logger = new Logger();
$logger->log(sprintf('User %s submitted the form', $username));
});
// Tworzymy obiekt zdarzenia
$event = new Event();
$event->setName('submit');
$event->setParam('formData', $_POST);
// Wywołujemy zdarzenie
$eventManager->triggerEvent($event);
W tym przykładzie zarejestrowaliśmy nasz słuchacz do zdarzenia „submit”. Słuchacz ten loguje informacje o tym, który użytkownik wysłał formularz. Następnie tworzymy obiekt zdarzenia i wywołujemy go, przekazując mu dane z formularza. W momencie wywołania zdarzenia, Event Manager wywoła nasz słuchacz, który zaloguje informacje do pliku dziennika.