다음 튜토리얼 칼럼인Laravel에서는 라라벨 이벤트의 구현 원리를 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!
1. 이벤트 및 리스너 AppProviders EventServiceProvider
protected $listen = [ 'App\Events\UserAdd' => [ 'App\Listeners\UserAddListener', ], ];
2의 수신 속성을 구성합니다.
php artisan event:generate
는 AppEventsUserAdd라는 두 개의 클래스를 생성합니다. 및 AppListenersUserAddListener 문서.
이벤트 클래스는 주로 해당 정보를 저장하는 데 사용됩니다. 예를 들어 속성은 사용자 모델 인스턴스를 저장하고 이벤트 클래스 인스턴스는 해당 이벤트 리스너의 핸들 메서드에 전달되어 이벤트 로직을 처리합니다.
public function __construct(User $user) { $this->user = $user;//创建事件实例时保存的信息 }
AppListenersUserAddListener 리스너의 핸들 메소드는 로직이 처리되는 곳입니다.
public function handle(UserAdd $event) { dd($event->user);//获取到对应事件实例的信息 }
3 이벤트를 트리거하려면 공개 함수인 events()를 사용하세요. 해당 이벤트 클래스의 인스턴스를 전달합니다
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); }); }); }
IOC 컨테이너에 등록된 이벤트는 실제로 IlluminateEventsDispatcher 클래스입니다. 즉, Facade Event는 실제로 이 클래스의 메서드를 호출합니다
중요한 속성과 방법 :
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),
위 내용은 laravel 이벤트의 구현 원리를 알고 계시나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!