> PHP 프레임워크 > Laravel > laravel 이벤트의 구현 원리를 알고 계시나요?

laravel 이벤트의 구현 원리를 알고 계시나요?

藏色散人
풀어 주다: 2020-06-22 13:56:34
앞으로
3793명이 탐색했습니다.

다음 튜토리얼 칼럼인 Laravel에서는 라라벨 이벤트의 구현 원리를 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

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方法
로그인 후 복사

구현 원칙(IlluminateEventsDispatcher 클래스)

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿