이벤트에서 유저가 생성되었을 때를 클래스로 작성합니다.
namespace App\Events;
use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class UserCreated
{
use Dispatchable, SerializesModels;
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
}
컨트롤러에서는 저장되는 메소드를 작성합니다.
namespace App\Http\Controllers;
use App\Events\UserCreated;
use App\Http\Requests\StoreUserRequest;
use App\Models\User;
class UserController extends Controller
{
public function store(StoreUserRequest $request)
{
// 새로운 사용자를 생성하고 저장
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
]);
// UserCreated 이벤트를 발생시킴
event(new UserCreated($user));
return response()->json(['message' => 'User created successfully']);
}
}
리스너는 필수가 아니지만 이벤트 발생후 로그를 찍어주기 위해서는 리스너에 해당 내용을 넣어줍니다.
namespace App\Listeners;
use App\Events\UserCreated;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;
class UserCreatedListener implements ShouldQueue
{
use InteractsWithQueue;
public function handle(UserCreated $event)
{
Log::info('New user created: ' . $event->user->email);
}
}
리스너를 프로바이더에 등록합니다.
namespace App\Providers;
use App\Events\UserCreated;
use App\Listeners\UserCreatedListener;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
UserCreated::class => [
UserCreatedListener::class,
],
];
public function boot()
{
parent::boot();
}
}