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 ?

藏色散人
藏色散人avant
2020-06-22 13:55:193824parcourir

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',
        ],
    ];

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

php artisan event:generate

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;//创建事件实例时保存的信息
}

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);//获取到对应事件实例的信息
}

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方法

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);
        });
    });
}

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),

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer