Maison > cadre php > Laravel > Connaissez-vous le principe de mise en œuvre des événements laravel ?

Connaissez-vous le principe de mise en œuvre des événements laravel ?

藏色散人
Libérer: 2020-06-22 13:56:34
avant
3836 Les gens l'ont consulté

La colonne tutorielle suivante de Laravel vous présentera le principe de mise en œuvre des événements laravel. J'espère qu'elle sera utile aux amis dans le besoin !

Connaissez-vous le principe de mise en œuvre des événements laravel ?

Simple à utiliser

1 Configurer les événements et les auditeurs Attribut d'écoute d'AppProviders EventServiceProvider

protected $listen = [
        'App\Events\UserAdd' => [
            'App\Listeners\UserAddListener',
        ],
    ];
Copier après la connexion

. 2. Générez la classe d'événement correspondante et les fichiers de classe d'écoute

php artisan event:generate
Copier après la connexion

généreront deux fichiers de classe : AppEventsUserAdd et AppListenersUserAddListener.

La classe d'événement est principalement utilisée pour enregistrer les informations correspondantes. Par exemple, un attribut enregistre l'instance de modèle utilisateur, et l'instance de classe d'événement sera transmise à la méthode handle de l'écouteur d'événement correspondant pour traiter l'événement. logique.

public function __construct(User $user)
{
   $this->user = $user;//创建事件实例时保存的信息
}
Copier après la connexion

AppListenersUserAddListener La méthode handle de l'écouteur est l'endroit où la logique est traitée

public function handle(UserAdd $event)
{
        dd($event->user);//获取到对应事件实例的信息
}
Copier après la connexion

3 Pour déclencher des événements, utilisez la fonction publique events(). Passer dans l'instance de la classe d'événements correspondante

event(new \App\Events\UserAdd($user));//执行这一步时,就会执行到handle方法
Copier après la connexion

Principe d'implémentation (classe IlluminateEventsDispatcher)

public function register()
{
    $this->app->singleton('events', function ($app) {
        return (new Dispatcher($app))->setQueueResolver(function () use ($app) {
            return $app->make(QueueFactoryContract::class);
        });
    });
}
Copier après la connexion

Les événements enregistrés dans le conteneur IOC sont en fait la classe IlluminateEventsDispatcher, c'est-à-dire , l'événement de façade appelle en réalité les méthodes de cette classe

Attributs et méthodes importants :

protected $listeners = [];
protected $wildcards = [];
protected $wildcardsCache = [];//这三个属性都是配置事件与监听器关系的数组,时间注册进来后就是放到对应的数组里面的。
//这个方法就是注册事件用的,把配置好的事件注入到上面的属性中
public function listen($events, $listener)
    {
        foreach ((array) $events as $event) {
            if (Str::contains($event, '*')) {
                $this->setupWildcardListen($event, $listener);
            } else {
                $this->listeners[$event][] = $this->makeListener($listener);
            }
        }
    }
//这个方法就是执行对应事件监听器的方法,找到事件下面的是所有监听器,然后执行。
public function dispatch($event, $payload = [], $halt = false),
Copier après la connexion

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal