localdisk

PHP とか Java とか Web とか好きなことを書きます。

Laravel の Event クラスを使って処理をまとめてみる

Laravel の Event クラスは、任意の Event を発行できます。今回はメール送信処理をまとめてみましょう。

参考
イベント

まずは Event::fire でイベントを発行します。

<?php
public function postRegister()
{
    // ユーザ登録
    ………
    // メール送信
    Event::fire('emails.user.register', ['件名', 'fromメールアドレス', 'toメールアドレス', ['データ']]);
}

この例では、ユーザー登録後、emails.user.register というイベントを発行しています。

そしてイベントの受け取りは以下のようになります。

<?php
// app/start/global.php
Event::listen('emails.*', function($subject, $from, $to, $data)
{
    Mail::pretend(); // デバッグ用
    Mail::send(Event::firing(), $data, function($message) use ($from, $to, $subject)
    {
        $message->from($from)->to($to)->subject($subject);
    });
});

Event::listen の第一引数の emails.*ワイルドカードリスナーといって emails. 以降のどんな文字列のイベントが発行されても受け取ることができます。

そして、Mail::send の第一引数である Event::firing は発行されたイベントの文字列が取得できます(この場合は emails.user.register)。

今回は、イベント発行の文字列とメールテンプレート(app/views/emails/user/register.blade.php)の場所を一致させることによってメール送信処理をこのようにまとめてみました。

こちらからは以上です。