이벤트 시스템
CI4의 Events 클래스로 이벤트를 발행하고 구독하는 방법을 알아봅니다.
시나리오 선택 & 실행
1
이벤트 리스너 등록 & 발생
use CodeIgniter\Events\Events;
// 리스너 등록 (클로저)
Events::on('user_registered', function(array $user) {
// 이메일 발송, 로그 기록 등
log_message('info', '신규 가입: ' . $user['email']);
});
// 이벤트 발생 (데이터 전달)
Events::trigger('user_registered', ['email' => 'user@example.com', 'name' => '홍길동']);
// 여러 인자 전달은 배열로 — 리스너가 배열을 받음
Events::trigger('my_event', $arg1, $arg2);
2
우선순위 & 실행 중단
// 우선순위 상수 (낮은 숫자 = 먼저 실행)
// EVENT_PRIORITY_HIGH = 10
// EVENT_PRIORITY_NORMAL = 100 (기본값)
// EVENT_PRIORITY_LOW = 200
Events::on('my_event', $listener1, EVENT_PRIORITY_HIGH); // 먼저
Events::on('my_event', $listener2, EVENT_PRIORITY_NORMAL); // 다음
Events::on('my_event', $listener3, EVENT_PRIORITY_LOW); // 나중
// 리스너에서 false 반환 → 이후 리스너 실행 중단
Events::on('my_event', function() {
return false; // 체인 중단
});
$result = Events::trigger('my_event'); // false = 중단됨
3
app/Config/Events.php에 전역 등록
// app/Config/Events.php — 애플리케이션 시작 시 자동 등록
use CodeIgniter\Events\Events;
// 모델이 데이터를 저장할 때 발생하는 CI4 내장 이벤트
Events::on('post_model_insert', function(\App\Models\PostModel $model) {
// 캐시 무효화, 알림 발송 등
});
// 커스텀 이벤트 전역 리스너
Events::on('user_login', [App\Listeners\UserLoginListener::class, 'handle']);