Maison >développement back-end >tutoriel php >Événements personnalisés à Laravel

Événements personnalisés à Laravel

William Shakespeare
William Shakespeareoriginal
2025-03-04 09:07:10119parcourir

Custom Events in Laravel

Dans cet article, nous allons explorer les bases de la gestion des événements à Laravel. Nous créerons également un exemple réel d'un événement et d'un auditeur personnalisés.

Le concept des événements dans Laravel est basé sur un modèle de conception logicielle très populaire - le modèle d'observateur. Dans ce modèle, le système soulève des événements lorsque quelque chose se produit, et vous pouvez définir les auditeurs qui écoutent ces événements et réagissent en conséquence. C'est une fonctionnalité vraiment utile qui vous permet de découpler des composants dans un système qui aurait autrement entraîné un code étroitement couplé.

Par exemple, disons que vous souhaitez informer tous les modules d'un système lorsque quelqu'un se connecte à votre site. Ainsi, cela leur permet de réagir à cet événement de connexion, qu'il s'agisse d'envoyer un e-mail ou une notification dans l'application, ou d'ailleurs tout ce qui veut réagir à cet événement de connexion.

Basiques des événements et des auditeurs

Dans cette section, nous explorerons la façon de Laravel de mettre en œuvre les événements et les écouteurs dans le cadre central. Si vous connaissez l'architecture de Laravel, vous savez probablement que Laravel implémente le concept d'un fournisseur de services, qui vous permet d'injecter différents services dans une application.

De même, Laravel fournit une classe d'événements à événement intégrée pour une application. application / fournisseurs / eventserviceprovider.php fichier.

Voyons de près l'événement de connexion .

<?php<br><br>namespace App\Providers;<br><br>use Illuminate\Auth\Events\Registered;<br>use Illuminate\Auth\Listeners\SendEmailVerificationNotification;<br>use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;<br>use Illuminate\Support\Facades\Event;<br><br>class EventServiceProvider extends ServiceProvider<br>{<br>    /**<br>     * The event listener mappings for the application.<br>     *<br>     * @var array<br>     */<br>    protected $listen = [<br>        Registered::class => [<br>            SendEmailVerificationNotification::class,<br>        ],<br>    ];<br><br>    /**<br>     * Register any events for your application.<br>     *<br>     * @return void<br>     */<br>    public function boot()<br>    {<br>        parent::boot();<br><br>        //<br>    }<br>}<br>
Bien sûr, vous devez définir l'événement artisan

.

Cette commande génère un événement et des classes auditeurs répertoriées sous la commande artisan Cette commande pour génère un événement et des classes auditeurs répertoriées sous la commande artisan

pour gérer un événement et une base de classes auditeur répertoriées sous la commande artisan
php artisan event:generate<br>
Cette commande pour génère un événement et des classes auditeurs répertoriées sous l'artisan

Le modèle de code.

php artisan event:generate<br>
qui aurait dû créer la classe d'événements à

applications / événements / clearcache.php et la classe d'écouteur à applications / auditeurs / warmupcache.php .

Avec quelques modifications, la classe

app / events / clearcache.php doit ressembler à une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une tentative comme une série Ceci:

<?php<br><br>namespace App\Events;<br><br>use Illuminate\Broadcasting\Channel;<br>use Illuminate\Broadcasting\InteractsWithSockets;<br>use Illuminate\Broadcasting\PresenceChannel;<br>use Illuminate\Broadcasting\PrivateChannel;<br>use Illuminate\Contracts\Broadcasting\ShouldBroadcast;<br>use Illuminate\Foundation\Events\Dispatchable;<br>use Illuminate\Queue\SerializesModels;<br><br>class ClearCache<br>{<br>    use Dispatchable, InteractsWithSockets, SerializesModels;<br><br>    public $cache_keys = [];<br><br>    /**<br>     * Create a new event instance.<br>     *<br>     * @return void<br>     */<br>    public function __construct(Array $cache_keys)<br>    {<br>        $this->cache_keys = $cache_keys;<br>    }<br><br>    /**<br>     * Get the channels the event should broadcast on.<br>     *<br>     * @return \Illuminate\Broadcasting\Channel|array<br>     */<br>    public function broadcastOn()<br>    {<br>        return new PrivateChannel('channel-name');<br>    }<br>}<br>
Comme vous l'avez probablement remarqué, nous avons ajouté un nouvel événement de propriété

La fonction d'assistance est utilisée pour élever un événement de n'importe où dans une application. Lorsque l'événement est soulevé, Laravel appelle tous les auditeurs écoutant cet événement particulier.

Dans notre cas, l'auditeur AppListerSwarmUpCache <p> est défini pour écouter l'événement <code> AppeventsClearCache <code>AppListenersWarmUpCache. Ainsi, la méthode Handle <code>AppEventsClearCache de l'écouteur AppListerWarmUpCache <code>handle est invoquée lorsque l'événement est soulevé à partir d'un contrôleur. Le reste est de réchauffer les caches qui ont été éliminées! AppListenersWarmUpCache

C'est ainsi que vous pouvez créer des événements personnalisés dans votre application et travailler avec eux.

Qu'est-ce qu'un abonné d'événement?

L'abonné de l'événement vous permet de vous abonner à plusieurs écouteurs d'événements en un seul endroit. Que vous souhaitiez logiquement les auditeurs d'événements de groupe ou que vous souhaitiez contenir des événements croissants en un seul endroit, c'est l'abonné de l'événement que vous recherchez.

Si nous avions mis en œuvre les exemples discutés jusqu'à présent dans cet article en utilisant l'abonné de l'événement, cela pourrait ressembler à ceci. Le premier argument de la méthode

est une instance de la classe
<?php<br><br>namespace App\Providers;<br><br>use Illuminate\Auth\Events\Registered;<br>use Illuminate\Auth\Listeners\SendEmailVerificationNotification;<br>use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;<br>use Illuminate\Support\Facades\Event;<br><br>class EventServiceProvider extends ServiceProvider<br>{<br>    /**<br>     * The event listener mappings for the application.<br>     *<br>     * @var array<br>     */<br>    protected $listen = [<br>        Registered::class => [<br>            SendEmailVerificationNotification::class,<br>        ],<br>    ];<br><br>    /**<br>     * Register any events for your application.<br>     *<br>     * @return void<br>     */<br>    public function boot()<br>    {<br>        parent::boot();<br><br>        //<br>    }<br>}<br>
, que vous pouvez utiliser pour lier des événements avec des auditeurs en utilisant la méthode

. subscribe subscribe Le premier argument de la méthode IlluminateEventsDispatcher est un événement que vous voulez écouter, et le deuxième argument est un auditeur qui sera appelé lorsque l'événement sera soulevé. lui-même. listen

La classe des abonnés de l'événement ne sera pas ramassé automatiquement. Vous devez l'enregistrer dans la classe

EventServiceProvider.php listen sous la propriété

, comme indiqué dans l'extrait suivant.

Donc, c'était également le cours d'abonné à votre disposition, et avec cela, nous avons également atteint la fin de cet article. auditeurs. Ils sont basés sur le modèle de conception de l'observateur, qui vous permet d'élever des événements à l'échelle de l'application et de permettre à d'autres modules d'écouter ces événements et de réagir en conséquence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn