In questo articolo, esploreremo le basi della gestione degli eventi in Laravel. È una delle caratteristiche importanti che tu, come sviluppatore, dovresti avere nel tuo arsenale nel tuo ambito desiderato. Mentre andiamo avanti, coglieremo anche questa opportunità per creare un esempio reale di un evento personalizzato e di un ascoltatore, e questo è l'obiettivo finale di questo articolo e.
Il concetto di eventi in Laravel si basa su un modello di progettazione software molto popolare, il modello di osservatore. In questo schema, il sistema dovrebbe generare eventi quando succede qualcosa, e puoi definire ascoltatori che ascoltano questi eventi e reagiscono di conseguenza. È una funzionalità davvero utile in un modo che consente di disaccoppiare i componenti in un sistema che altrimenti avrebbe comportato un codice strettamente accoppiato.
Ad esempio, supponi di voler notificare tutti i moduli in un sistema quando qualcuno accede al tuo sito. In questo modo, consente loro di reagire a questo evento di accesso, sia che si tratti di inviare un messaggio di posta elettronica o di una notifica in-app o di qualsiasi cosa che voglia reagire a questo evento di accesso.
In questa sezione, esploreremo il modo in cui Laravel implementa eventi e ascoltatori nel framework principale. Se hai familiarità con l'architettura di Laravel, probabilmente sai che Laravel implementa il concetto di un fornitore di servizi che ti permette di iniettare servizi diversi in un'applicazione.
Allo stesso modo, Laravel fornisce un built-in EventServiceProvider.php
classe che ci consente di definire i mapping listener di eventi per un'applicazione.
Vai avanti e tira dentro app / fornitori / EventServiceProvider.php
file.
['App \ Listeners \ EventListener',],]; / ** * Registra qualsiasi evento per la tua applicazione. * * @return void * / public function boot () parent :: boot (); //
Diamo uno sguardo da vicino al $ ascolta
proprietà, che consente di definire una serie di eventi e ascoltatori associati. Le chiavi dell'array corrispondono agli eventi in un sistema e i loro valori corrispondono agli ascoltatori che verranno attivati quando l'evento corrispondente viene generato in un sistema.
Preferisco passare attraverso un esempio del mondo reale per dimostrarlo ulteriormente. Come probabilmente saprai, Laravel fornisce un sistema di autenticazione integrato che facilita funzionalità come login, registrazione e simili.
Supponiamo che tu voglia inviare la notifica via email, come misura di sicurezza, quando qualcuno accede all'applicazione. Se Laravel non supportava la funzione listener dell'evento, potresti aver finito con la modifica della core class o in qualche altro modo per collegare il tuo codice che invia un'email.
In effetti, sei sul lato più fortunato di Laravel che ti aiuta a risolvere questo problema usando il listener di eventi. Rivediamo il app / fornitori / EventServiceProvider.php
file per assomigliare al seguente.
['App \ Listeners \ SendEmailNotification',],]; / ** * Registra qualsiasi evento per la tua applicazione. * * @return void * / public function boot () parent :: boot (); //
Illuminare \ Auth \ Eventi \ Login
è un evento che verrà sollevato dal auth
plugin quando qualcuno accede a un'applicazione. Abbiamo legato questo evento al App \ ascoltatori \ SendEmailNotification
ascoltatore, quindi verrà attivato sull'evento di accesso.
Certo, è necessario definire il App \ ascoltatori \ SendEmailNotification
classe dell'ascoltatore in primo luogo. Come sempre, Laravel ti permette di creare un codice template di un listener usando il comando artisan.
evento php artisan: generare
Questo comando genera classi di evento e listener elencate sotto $ ascolta
proprietà.
Nel nostro caso, il Illuminare \ Auth \ Eventi \ Login
l'evento esiste già, quindi crea solo il App \ ascoltatori \ SendEmailNotification
classe dell'ascoltatore. In effetti, avrebbe creato il Illuminare \ Auth \ Eventi \ Login
anche la classe evento se non esisteva in primo luogo.
Diamo un'occhiata alla classe di ascoltatori creata in app / ascoltatori / SendEmailNotification.php
.
È il
maniglia
metodo che verrà invocato con dipendenze appropriate ogni volta che il listener viene attivato. Nel nostro caso, il$ evento
l'argomento dovrebbe contenere informazioni contestuali sull'evento di accesso, che ha registrato le informazioni dell'utente.E possiamo usare il
$ evento
oggetto di effettuare ulteriori elaborazioni nelmaniglia
metodo. Nel nostro caso, vogliamo inviare la notifica via email all'utente collegato.La rivista
maniglia
il metodo può sembrare qualcosa di simile:handle di funzione pubblica (Login $ event) // registra l'e-mail utente e il nome utente $ email = $ event-> user-> email; $ username = $ event-> user-> name; // invia una notifica via email sull'accessoEcco come si suppone di utilizzare la funzione eventi in Laravel. Dalla prossima sezione in poi, andremo avanti e creeremo un evento personalizzato e una classe di ascolto associata.
Crea un evento personalizzato
Lo scenario di esempio che useremo per il nostro esempio è qualcosa del genere:
CacheClear
evento insieme alle informazioni contestuali quando un'applicazione fa il suddetto. Passeremo le chiavi del gruppo di cache insieme a un evento che è stato cancellato.CacheClear
evento e vorrebbe implementare il codice che scalda le cache correlate.Rivisitiamo il app / fornitori / EventServiceProvider.php
file e registra i nostri mapping di eventi e listener personalizzati.
['App \ Listeners \ WarmUpCache',],]; / ** * Registra qualsiasi evento per la tua applicazione. * * @return void * / public function boot () parent :: boot (); //
Come puoi vedere, abbiamo definito il App \ Eventi \ clearcache
evento e classe di ascolto associata App \ ascoltatori \ WarmUpCache
sotto il $ ascolta
proprietà.
Successivamente, abbiamo bisogno di creare file di classe associati. Ricorda che puoi sempre usare il comando artisan per generare un codice template di base.
evento php artisan: generare
Questo dovrebbe aver creato la classe dell'evento a app / Eventi / ClearCache.php
e la classe dell'ascoltatore a app / ascoltatori / WarmUpCache.php
.
Con alcuni cambiamenti, il app / Eventi / ClearCache.php
la classe dovrebbe assomigliare a questa:
cache_keys = $ cache_keys; / ** * Ottieni i canali su cui l'evento dovrebbe essere trasmesso. * * @return Canale | array * / public function broadcastOn () return new PrivateChannel ('channel-name');
Come probabilmente avrai notato, abbiamo aggiunto una nuova proprietà $ cache_keys
che verrà utilizzato per contenere informazioni che verranno passate insieme a un evento. Nel nostro caso, passeremo i gruppi di cache che sono stati svuotati.
Successivamente, diamo un'occhiata alla classe listener con un aggiornamento maniglia
metodo a app / ascoltatori / WarmUpCache.php
.
cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys come $ cache_key) // genera cache per questa chiave // warm_up_cache ($ cache_key)
Quando viene chiamato il listener, il maniglia
il metodo viene passato con l'istanza dell'evento associato. Nel nostro caso, dovrebbe essere l'istanza di ClearCache
evento che verrà passato come primo argomento al maniglia
metodo.
Successivamente, si tratta solo di iterare attraverso ciascuna chiave di cache e di scaldare le cache associate.
Ora, abbiamo tutto a posto per mettere alla prova le cose. Creiamo rapidamente un file controller su App / HTTP / Controller / EventController.php
per dimostrare come è possibile generare un evento.
In primo luogo, abbiamo passato una serie di chiavi di cache come primo argomento durante la creazione di un'istanza di
ClearCache
evento.La funzione helper evento viene utilizzata per generare un evento da qualsiasi punto all'interno di un'applicazione. Quando l'evento viene sollevato, Laravel chiama tutti gli ascoltatori che ascoltano quel particolare evento.
Nel nostro caso, il
App \ ascoltatori \ WarmUpCache
ascoltatore è impostato per ascoltare ilApp \ Eventi \ clearcache
evento. Quindi, ilmaniglia
metodo delApp \ ascoltatori \ WarmUpCache
il listener viene richiamato quando l'evento viene generato da un controller. Il resto è di scaldare le cache che sono state cancellate!Ecco come puoi creare eventi personalizzati nella tua applicazione e lavorare con loro.
Che cos'è un abbonato dell'evento?
Il sottoscrittore dell'evento consente di sottoscrivere più listener di eventi in un unico luogo. Se vuoi raggruppare logicamente i listener di eventi o vuoi contenere eventi in crescita in un unico luogo, è l'abbonato dell'evento che stai cercando.
Se avessimo implementato gli esempi discussi finora in questo articolo usando il sottoscrittore dell'evento, potrebbe apparire come questo.
dall'utente> e-mail; $ username = $ event-> user-> name; // invia una notifica via email per l'accesso ... / ** * Gestire gli eventi di logout dell'utente. * / public function warmUpCache ($ event) if (isset ($ event-> cache_keys) && count ($ event-> cache_keys)) foreach ($ event-> cache_keys come $ cache_key) // genera cache per questa chiave // warm_up_cache ($ cache_key) / ** * Registrare i listener per l'utente. * * @param Illuminate \ Events \ Dispatcher $ events * / subscribe funzione pubblica ($ events) $ events-> listen ('Illuminate \ Auth \ Events \ Login', 'App \ Listeners \ ExampleEventSubscriber @ sendEmailNotification'); $ events-> listen ('App \ Events \ ClearCache', 'App \ Listeners \ ExampleEventSubscriber @ warmUpCache');È il
sottoscrivi
metodo che è responsabile per la registrazione degli ascoltatori. Il primo argomento delsottoscrivi
metodo è l'istanza diIlluminare \ Eventi \ Dispatcher
classe che è possibile utilizzare per associare eventi con gli ascoltatori utilizzando ilascolta
metodo.Il primo argomento del
ascolta
metodo è un evento che si desidera ascoltare e il secondo argomento è un listener che verrà chiamato quando viene generato l'evento.In questo modo, è possibile definire più eventi e listener nella classe dell'abbonato stesso.
La classe dell'iscritto dell'evento non verrà prelevata automaticamente. Devi registrarlo nel
EventServiceProvider.php
classe sotto il$ abbonato
proprietà, come mostrato nel seguente frammento.Quindi questa è stata la classe di abbonati dell'evento a tua disposizione, e con ciò abbiamo raggiunto anche la fine di questo articolo.
Conclusione
Oggi abbiamo discusso di alcune delle interessanti funzionalità degli eventi e degli ascoltatori di Laravel. Si basano sul modello di progettazione degli osservatori che consente di aumentare gli eventi a livello di applicazione e consentire ad altri moduli di ascoltare tali eventi e reagire di conseguenza.
Ti stai semplicemente aggiornando su Laravel o stai cercando di espandere le tue conoscenze, il tuo sito o la tua applicazione con le estensioni? Abbiamo una varietà di cose che puoi studiare nel mercato Envato.
!