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