app/Events 폴더
app/Listeners 폴더
발행자가 될 수도 있고, 구독자가 될 수 있다.
발행자는 여려명의 구독자를 갖을 수 있고, 구독자는 여러개의 발행자를 갖을 수 있다.
다대다 연결은 어떻게 할까 ?
$listen = []
통신은 이벤트 객체가 서로를 연결한다.
Event 객체 생성
php artisan make:event UserRegistered
namespace App\Events;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
use App\Models\User;
class UserRegistered {
use Dispatchable, SerializesModels;
public $user;
public function __construct(User $user) {
$this->user = $user;
}
}
Dispatchable, SerializesModel;
UserRegistered::dispatch($user)
리스너 객체 생성
php artisan make:listener SendWelcomeEmail --event=UserRegistered
namespace App\Listeners;
use App\Events\UserRegistered;
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;
class SendWelcomeEmail {
public function handle(UserRegistered $event) {
// Send email logic
Mail::to($event->user->email)->send(new WelcomeEmail($event->user));
}
}
handle() 함수가 꼭 있어야 함.
메일 클래스 만들기
php artisan make:mail WelcomeEmail
app/Mail/WelcomeEmail
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use App\Models\User;
class WelcomeEmail extends Mailable {
use Queueable, SerializesModels;
public $user;
public function __construct(User $user) {
$this->user = $user;
}
public function build() {
return $this->view('emails.welcome');
}
}
이벤트 및 리스너 등록
protected $listen = [
'App\Events\UserRegistered' => [
'App\Listeners\SendWelcomeEmail',
],
];
app/Providers/EventServiceProvider.php
이벤트가 발생했을때..해야할 일을 여러개 등록할 수 있다.
이벤트 실행
use App\Events\UserRegistered;
// ... Inside your registration method
$user = User::create(/* user data */);
UserRegistered::dispatch($user);
핵심 정리
이벤트를 만들고 이벤트가 발생하면 어떤 일을 해야 하는지 알려줘야 한다.
어떤일을 해야 하는지 담당자(Listener) 에게 알려주는 방법은 EventServicesProvider 에 접수해야 함.
$listen = []
이벤트 발생은 dispatch() 로 실행시킴.
미리 정의된 이벤트
vendor/laravel/framework/src/Illuminate/Auth/Events
예제 : Registered::class
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
Subscribed::class => [
SendSubscribedNotification::class,
],
Published::class => [
SendPublishedNotification::class,
],
];
728x90
'Laravel' 카테고리의 다른 글
Laravel - Service Container 서비스 컨테이너에 대해서 (0) | 2024.01.16 |
---|---|
Laravel - sanctum 에 대해서 (0) | 2024.01.09 |
Laravel - FormRequest에 대해서 (0) | 2024.01.02 |
Laravel - Socialite - Two\InvalidStateException 에러 (0) | 2023.12.27 |
Laravel - 로컬개발 환경설정 (Homestead with VirtualBox) (0) | 2023.12.22 |