Heim >PHP-Framework >Laravel >Kennen Sie das Implementierungsprinzip von Laravel-Events?
Die folgende Tutorial-Kolumne von Laravel wird Ihnen das Implementierungsprinzip von Laravel-Events vorstellen. Ich hoffe, dass es Freunden in Not hilfreich sein wird!
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方法
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!