아무거나

event 기능 본문

PHP/Laravel

event 기능

전봉근 2019. 4. 5. 11:46
반응형

[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
Comments