일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- tool
- php
- ReactJS
- Git
- Web Server
- devops
- jsp
- it
- db
- MySQL
- Design Patterns
- JVM
- 맛집
- Spring
- linux
- laravel
- AWS
- jenkins
- Gradle
- Oracle
- ubuntu
- Spring Batch
- elasticsearch
- javascript
- Spring Boot
- springboot
- IntelliJ
- redis
- 요리
- java
- Today
- Total
아무거나
event 기능 본문
[laravel 이벤트 기능]
미들웨어는 컨트롤러를 감싸고 있는것 즉, 컨트롤러 전에 미리 실행된다.
미들웨어는 현재 리퀘스트에서 처리가되지만 이벤트는 다르게 처리될수도있다.
회원(event class) -> {웹 사이트 로그인} -> 웹 사이트(laravel) -> {이메일알림} -> 관리자(handler class)
* php artisan make:event BeautyLogined 명령어로도 만들 수 있음
1. 이벤트 발생
- route에 추가
[소스]
Route::get('event', function(Request $request) {
Event::fire(new BeautyLogined($request->ip()));
return redirect('/');
});
- app/Events/BeautyLogined.php 추가
[소스]
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class BeautyLogined
{
//use Dispatchable, InteractsWithSockets, SerializesModels;
use SerializesModels;
protected $ipAddress;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($ipAddress) {
$this->ipAddress = $ipAddress;
}
public function getIpAddress() {
return $this->ipAddress;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn() {
return new PrivateChannel('channel-name');
}
}
2. 핸들러 생성
* php artisan handler:event AlertToMenByEmail --event=BeautyLogined
- app/Handlers/Events/AlertToMenByEmail.php 생성
[소스]
namespace App\Handlers\Events;
use App\Events\BeautyLogined;
class AlertToMenByEmail
{
public function __construct() {
}
public function handle(BeautyLogined $event) {
// 모든 내용이 처리되었음을 알리는 로그 출력
Log::info($event->getIpAddress() . " , 알람 메일 전송을 완료하였습니다.");
}
}
- app/Providers/EventServiceProvider.php 내용 추가
[소스]
protected $listen = [
'App\Events\Event' => [
'App\Listeners\EventListener',
],
// 이벤트를 듣기위한 Listener 등록
BeautyLogined::class => [
AlertToMenByEmail::class,
],
];
- 이벤트를 호출해주면 storage/laravel.log에 log가 남는다.
3. 확장
사용자(BeautyLogined) -> 웹사이트(laravel) => sms으로알림(AlertToMenByEmail) ,email로 알림(AlertToMenBySms)
- app/Handlers/events/AlertToMenBySms.php 추가
[소스]
namespace App\Handlers\Events;
use App\Events\BeautyLogined;
use Illuminate\Support\Facades\Log;
class AlertToMenBySms
{
public function __construct() {
}
public function handle(BeautyLogined $event) {
// 모든 내용이 처리되었음을 알리는 로그 출력
Log::info($event->getIpAddress() . " , 알람 메일 전송을 완료하였습니다.");
}
}
- 위에 과정이랑 똑같이 Providers에 등록
[소스]
protected $listen = [
'App\Events\Event' => [
'App\Listeners\EventListener',
],
// 이벤트를 듣기위한 Listener 등록
BeautyLogined::class => [
AlertToMenByEmail::class,
// 새로운 핸들러 등록
AlertToMenBySms::class,
],
];
- 다시 테스트를 해본다 그럼 로그가 2개 찍힌다.
'PHP > Laravel' 카테고리의 다른 글
상수 관리 (0) | 2019.04.08 |
---|---|
사용자 인증(authentication) 예제 (0) | 2019.04.05 |
event & queue (0) | 2019.04.05 |
파일업로드 (0) | 2019.04.05 |
Eloquent + Pagination 사용 (0) | 2019.04.05 |