Come usare Symfony Event Dispatcher per PHP

Oggi impareremo come utilizzare il componente dispatcher dell'evento Symfony, che ti consente di creare eventi e ascoltatori nelle tue applicazioni PHP. Pertanto, diversi componenti della tua applicazione possono comunicare tra loro con codice liberamente accoppiato.

Cos'è il componente Dispatcher eventi di Symfony?

Si può avere familiarità con il pattern event-observer, che consente di definire i listener per gli eventi generati dal sistema in modo che vengano eseguiti quando l'evento viene attivato. Allo stesso modo, il componente EventDispatcher di Symfony consente di configurare un sistema in cui è possibile creare eventi e ascoltatori personalizzati. In questo modo, permetti ai componenti della tua applicazione di reagire se qualcosa succede in un sistema.

In effetti, il componente dispatcher di eventi fornisce tre elementi che puoi creare attorno all'architettura dell'app:evento, listener e dispatcher. L'intero sistema è orchestrato dalla classe dispatcher, che solleva gli eventi nei punti appropriati di un'applicazione e chiama gli ascoltatori associati a tali eventi.

Supponiamo che tu voglia consentire ad altri componenti della tua applicazione di reagire quando la cache viene cancellata. In tal caso, è necessario definire l'evento di cancellazione della cache in primo luogo. Dopo aver svuotato la cache, è possibile utilizzare il dispatcher per aumentare l'evento di cancellazione della cache e informare tutti gli ascoltatori che ascoltano questo evento. Ciò offre agli ascoltatori l'opportunità di eliminare le cache specifiche dei componenti.

In questo articolo, esploreremo le basi del componente del dispatcher dell'evento. Inizieremo con l'installazione e la configurazione e creeremo anche alcuni esempi reali per dimostrare tutti i concetti sopra menzionati.

Installazione e configurazione del Dispatcher eventi

In questa sezione, installeremo il componente del dispatcher dell'evento. Presumo che tu abbia già installato Composer sul tuo sistema, perché ne avremo bisogno per installare il componente EventDispatcher.

Una volta installato Composer, andare avanti e installare il componente EventDispatcher usando il seguente comando.

$ compositore richiede symfony / event-dispatcher

Questo dovrebbe aver creato il composer.json file, che dovrebbe assomigliare a questo:

"require": "symfony / event-dispatcher": "^ 4.1"

Modifichiamo ulteriormente il composer.json file per apparire come il seguente:

"require": "symfony / event-dispatcher": "^ 4.1", "autoload": "psr-4": "EventDispatchers \\": "src", "classmap": ["src "]

Una volta aggiunta una nuova voce di classe, procedere e aggiornare il caricatore automatico Composer eseguendo il seguente comando.

$ compositore discarica -o

Ora puoi usare il EventDispatchers spazio dei nomi per le classi di autoload sotto il src elenco.

Quindi questa è la parte di installazione, ma come si dovrebbe utilizzarla? In realtà, è solo questione di includere il autoload.php file creato da Composer nella tua applicazione, come mostrato nello snippet seguente.

Come creare, spedire e ascoltare gli eventi

In questa sezione, vedremo un esempio che dimostra come è possibile creare un evento personalizzato e impostare un listener per quell'evento.

La classe dell'evento

Per cominciare, vai avanti e crea il src / Eventi / DemoEvent.php file con il seguente contenuto.

foo = 'bar';  public function getFoo () return $ this-> foo; 

La nostra abitudine DemoEvent la classe estende il nucleo Evento classe del componente EventDispatcher. Il NOME costante mantiene il nome del nostro evento personalizzato-demo.event. Viene utilizzato quando si desidera impostare un listener per questo evento.

La classe dell'ascoltatore

Quindi, creiamo la classe listener src / ascoltatori / DemoListener.php con i seguenti contenuti.

getFoo () "\ n".; 

Il DemoListener la classe implementa il onDemoEvent metodo che viene attivato quando il sistema invia il DemoEvent evento. Ovviamente, non succederà ancora automaticamente, poiché è necessario registrare il DemoListener ascoltatore per ascoltare il demo.event evento che utilizza la classe EventDispatcher.

Finora, abbiamo creato classi di eventi e ascoltatori. Quindi vedremo come unire tutti questi pezzi insieme.

Un file di esempio

Creiamo il basic_example.php file con il seguente contenuto.

addListener ('demo.event', array ($ listener, 'onDemoEvent')); // invia $ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());

Il EventDispatcher la classe è l'elemento più importante nel componente EventDispatcher: consente di associare gli ascoltatori agli eventi che desiderano ascoltare. Abbiamo usato il addListener metodo del EventDispatcher classe per ascoltare il demo.event evento.

Il primo argomento del addListener metodo è un nome evento e il secondo argomento è PHP callable che viene attivato quando viene inviato l'evento registrato. Nel nostro caso, abbiamo fornito il DemoListener oggetto come ascoltatore insieme al onDemoEvent metodo.

$ dispatcher-> addListener ('demo.event', array ($ listener, 'onDemoEvent'));

Finalmente, abbiamo usato il spedizione metodo del EventDispatcher classe per spedire il demo.event evento.

$ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());

Quando esegui il basic_example.php file, dovrebbe produrre il seguente output.

$ php basic_example.php Viene chiamato DemoListener! Il valore di foo è: bar

Come previsto, il onDemoEvent metodo del DemoListener la classe è chiamata, e questo a sua volta chiama il getFoo metodo del DemoEvent classe per recuperare le informazioni relative agli eventi.

Che cos'è un abbonato dell'evento?

Nella sezione precedente, abbiamo creato un esempio che dimostra come creare un evento personalizzato e un listener personalizzato. Abbiamo anche discusso su come associare un listener all'evento specifico usando il EventDispatcher classe.

Questo è stato un semplice esempio, poiché volevamo solo impostare un listener per un singolo evento. D'altra parte, se si desidera impostare listener per più eventi o se si desidera raggruppare logicamente la logica di gestione degli eventi in una singola classe, è necessario considerare l'utilizzo di sottoscrittori di eventi perché consentono di mantenere tutto in un unico punto.

In questa sezione, rivedremo l'esempio che è stato creato nella sezione precedente.

La classe dell'iscritto

La prima cosa che dobbiamo fare è creare una classe subscriber che implementa il EventSubscriberInterface interfaccia. Vai avanti e crea il src / Subsribers / DemoSubscriber.php classe come mostrato nel seguente frammento.

 'onDemoEvent',);  public function onDemoEvent (DemoEvent $ event) // recupera informazioni sull'evento qui echo "DemoListener è chiamato! \ n"; echo "Il valore di foo è:". $ event-> getFoo (). "\ n"; 

Dal momento che la classe DemoSubscriber implementa il EventSubscriberInterface interfaccia, deve implementare il getSubscribedEvents metodo. Il getSubscribedEvents il metodo dovrebbe restituire una serie di eventi a cui si desidera iscriversi. È necessario fornire il nome dell'evento in una chiave di array e il nome del metodo in un valore di matrice che viene chiamato quando viene attivato l'evento.

L'ultima cosa è implementare il metodo listener nella stessa classe. Nel nostro caso, dobbiamo implementare il onDemoEvent metodo, e lo abbiamo già fatto.

Un file di esempio

È tempo di testare il nostro abbonato! Creiamo rapidamente il subscriber_example.php file con il seguente contenuto.

addSubscriber ($ abbonato); // invia $ dispatcher-> dispatch (DemoEvent :: NAME, new DemoEvent ());

Devi usare il addSubscriber metodo del EventDispatcher classe per sottoscrivere il tuo abbonato personalizzato, e il EventDispatcher classe gestisce il resto. Raccoglie gli eventi per essere sottoscritto dal getSubscribedEvents metodo e imposta gli ascoltatori per quegli eventi. A parte questo, tutto è lo stesso, e dovrebbe funzionare come previsto senza sorprese.

Proviamoci!

$ php subscriber_example.php DemoListener è chiamato! Il valore di foo è: bar

E quello era un abbonato dell'evento a tua disposizione! Questo ci porta anche alla fine di questo articolo.

Conclusione

Oggi abbiamo esplorato il componente dispatcher dell'evento Symfony, che ti consente di configurare eventi e ascoltatori nelle tue applicazioni PHP. Utilizzando questa libreria, è possibile creare un sistema liberamente accoppiato che consente ai componenti dell'applicazione di comunicare tra loro senza sforzo.

Sentiti libero di condividere i tuoi pensieri e le tue domande utilizzando il modulo sottostante!