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

Kennen Sie das Implementierungsprinzip von Laravel-Events?

藏色散人
Freigeben: 2020-06-22 13:56:34
nach vorne
3836 Leute haben es durchsucht

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',
        ],
    ];
Nach dem Login kopieren

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

php artisan event:generate
Nach dem Login kopieren

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

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

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

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方法
Nach dem Login kopieren

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);
        });
    });
}
Nach dem Login kopieren

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),
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage