라라벨 이벤트 공부

곽민우·2023년 3월 7일
0

이벤트에서 유저가 생성되었을 때를 클래스로 작성합니다.

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();
    }
}
profile
캘리포니아 가고 싶다

0개의 댓글