Observer w Zend Framework 3

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.