Heim >PHP-Framework >Laravel >Kennen Sie das Implementierungsprinzip von Laravel-Events?

Kennen Sie das Implementierungsprinzip von Laravel-Events?

藏色散人
藏色散人nach vorne
2020-06-22 13:55:193813Durchsuche

Die folgende Tutorial-Kolumne von Laravel wird Ihnen das Implementierungsprinzip von Laravel-Events vorstellen. Ich hoffe, dass es Freunden in Not hilfreich sein wird!

Kennen Sie das Implementierungsprinzip von Laravel-Events?

Einfach zu verwenden

1. Konfigurieren Sie Ereignisse und Listener. Listenattribut von AppProviders EventServiceProvider

protected $listen = [
        'App\Events\UserAdd' => [
            'App\Listeners\UserAddListener',
        ],
    ];

2. Generieren Sie die entsprechenden Ereignisklassen- und Listener-Klassendateien.

php artisan event:generate

generiert zwei Klassendateien: AppEventsUserAdd und AppListenersUserAddListener.

Die Ereignisklasse wird hauptsächlich zum Speichern der entsprechenden Informationen verwendet. Beispielsweise speichert ein Attribut die Benutzermodellinstanz und die Ereignisklasseninstanz wird zur Verarbeitung des Ereignisses an die Handle-Methode des entsprechenden Ereignis-Listeners übergeben Logik.

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

AppListenersUserAddListener In der Handle-Methode des Listeners wird die Logik verarbeitet

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

3. Um Ereignisse auszulösen, verwenden Sie die öffentliche Funktion events(). Übergeben Sie die Instanz der entsprechenden Ereignisklasse

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

Implementierungsprinzip (IlluminateEventsDispatcher-Klasse)

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

Die im IOC-Container registrierten Ereignisse sind eigentlich die IlluminateEventsDispatcher-Klasse , die Fassade Event ruft tatsächlich die Methoden dieser Klasse auf

Wichtige Attribute und Methoden:

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

Das obige ist der detaillierte Inhalt vonKennen Sie das Implementierungsprinzip von Laravel-Events?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen