Zend Framework - Event Manager
Tutte le applicazioni moderne richiedono componenti per eventi solidi e flessibili. Zend Framework fornisce uno di questi componenti,zend-eventmanager. Zend-eventmanager aiuta a progettare un'architettura di alto livello e supporta pattern soggetto / osservatore e programmazione orientata agli aspetti.
Installa Event Manager
Il gestore eventi può essere installato utilizzando il Composer come di seguito specificato -
composer require zendframework/zend-eventmanager
Concetti di Event Manager
I concetti fondamentali del gestore dell'evento sono i seguenti:
Event - L'evento è arbitrariamente chiamato azione, diciamo greet.
Listener- Qualsiasi richiamata PHP. Sono allegati agli eventi e vengono chiamati quando l'evento viene attivato. La firma predefinita di Listener è:
function(EventInterface $e)
EventInterface Class- Usato per specificare l'evento stesso. Ha metodi per impostare e ottenere informazioni sugli eventi come nome (set / getName), target (get / setTarget) e parametro (get / setParams).
EventManager class- L'istanza di EventManager tiene traccia di tutti gli eventi definiti in un'applicazione e dei suoi listener corrispondenti. EventManager fornisce un metodo,attach per allegare l'ascoltatore a un evento e fornisce un metodo, triggerper attivare qualsiasi evento predefinito. Una volta chiamato il trigger, EventManager chiama il listener ad esso collegato.
EventManagerAwareInterface- Affinché una classe supporti la programmazione basata su eventi, è necessario implementare EventManagerAwareInterface. Fornisce due metodi,setEventManager e getEventManager per ottenere e impostare il gestore dell'evento.
Esempio
Scriviamo una semplice applicazione console PHP per comprendere il concetto di gestore di eventi. Segui i passaggi indicati di seguito.
Crea una cartella "eventapp".
Installare zend-eventmanager usando il compositore.
Crea un file PHP Greeter.php all'interno della cartella "eventapp".
Crea lezione Greeter e implementare il EventManagerAwareInterface.
require __DIR__ . '/vendor/autoload.php';
class Greeter implements EventManagerAwareInterface {
// code
}
Qui, require viene utilizzato per caricare automaticamente tutti i componenti installati dal compositore.
Scrivi la setEventManager metodo in classe Greeter come mostrato di seguito -
public function setEventManager(EventManagerInterface $events) {
$events->setIdentifiers([ __CLASS__, get_called_class(),]); $this->events = $events; return $this;
}
Questo metodo imposta la classe corrente nel gestore eventi specificato (argomento $ events) e quindi imposta il gestore eventi nella variabile locale $events.
Il prossimo passo è scrivere il file getEventManager metodo in classe Greeter come mostrato di seguito -
public function getEventManager() {
if (null === $this->events) { $this->setEventManager(new EventManager());
}
return $this->events;
}
Il metodo ottiene il gestore eventi da una variabile locale. se non è disponibile, crea un'istanza del gestore eventi e la restituisce.
Scrivi un metodo, greet, in classe Greeter.
public function greet($message) {
printf("\"%s\" from class\n", $message); $this->getEventManager()->trigger(__FUNCTION__, $this, $message ]);
}
Questo metodo ottiene il gestore eventi e attiva / attiva gli eventi ad esso associati.
Il passaggio successivo consiste nel creare un'istanza di Greeter class e collega un ascoltatore al suo metodo, greet.
$greeter = new Greeter(); $greeter->getEventManager()->attach('greet', function($e) { $event_name = $e->getName(); $target_name = get_class($e->getTarget()); $params_json = json_encode($e->getParams()); printf("\"%s\" event of class \"%s\" is called." . " The parameter supplied is %s\n", $event_name,
$target_name, $params_json);
});
Il callback del listener stampa semplicemente il nome dell'evento, il target ei parametri forniti.
L'elenco completo di Greeter.php è il seguente -
<?php
require __DIR__ . '/vendor/autoload.php';
use Zend\EventManager\EventManagerInterface;
use Zend\EventManager\EventManager;
use Zend\EventManager\EventManagerAwareInterface;
class Greeter implements EventManagerAwareInterface {
protected $events; public function setEventManager(EventManagerInterface $events) {
$events->setIdentifiers([__CLASS__, get_called_class(), ]); $this->events = $events; return $this;
}
public function getEventManager() {
if (null === $this->events) { $this->setEventManager(new EventManager());
}
return $this->events; } public function greet($message) {
printf("\"%s\" from class\n", $message); $this->getEventManager()->trigger(__FUNCTION__, $this, [$message ]);
}
}
$greeter = new Greeter(); $greeter->greet("Hello");
$greeter->getEventManager()->attach('greet', function($e) {
$event_name = $e->getName();
$target_name = get_class($e->getTarget());
$params_json = json_encode($e->getParams());
printf("\"%s\" event of class \"%s\" is called." . " The parameter supplied is %s\n",
$event_name, $target_name,
$params_json); }); $greeter->greet("Hello");
Ora, esegui l'applicazione nel prompt dei comandi php Greeter.php e il risultato sarà il seguente:
"Hello" from class
"Hello" from class
"greet" event of class "Greeter" is called. The parameter supplied is ["Hello"]
L'applicazione di esempio sopra spiega solo le basi di un gestore di eventi. Il gestore eventi fornisce molte opzioni più avanzate comeListener Priority, Custom Callback Prototype / Signature, Short Circuiting, ecc. Il gestore eventi è ampiamente utilizzato nel framework Zend MVC.