Laravel 4.2 イベント

基本的な使用法

LaravelのEventクラスはシンプルなオブザーバの実装を提供します。アプリケーションの中でイベントを購読したり、リッスンするために使用します。

イベントを購読する

Event::listen('auth.login', function($user)
{
    $user->last_login = new DateTime;

    $user->save();
});

イベントを発行する

$response = Event::fire('auth.login', array($user));

アプリケーションの中で、次に起こすことを制御するために使用できる、レスポンスの配列をfireメソッドは返します。

優先度を指定し、イベントを購入する

イベントをリッスンする時に優先度を設定することもできます。高い優先度のリスナーは先に実行されます。同じ優先度のリスナーは登録した順番で実行されます。

Event::listen('auth.login', 'LoginHandler', 10);

Event::listen('auth.login', 'OtherHandler', 5);

イベントがそれ以上伝わるのを止める

イベントが他のリスナーに伝わるのを止めたい場合もあるでしょう。その場合、リスナー中でfalseをリターンしてください。

Event::listen('auth.login', function($event)
{
    // このイベントを処理する...

    return false;
});

どこでイベントを登録するか

これでイベントをどう登録するかを理解してもらえたと思います。しかし、どこで登録するのか迷っているんではないでしょうか。ご心配なく、よく尋ねられる質問です。残念ながら、答えを出すのは難しいのです。なぜなら、ほとんどどこででも登録できるからです! しかし、いくつかヒントはあります。イベントも、他の起動コードと同様に、app/start/global.phpのようなstartファイルのどれかで登録できます。

もしstartファイルが混雑したら、独立したapp/events.phpファイルを作成し、startファイルから読み込みこともできます。これは起動コードの他の部分と明確に分離してイベントを登録する簡単な手法です。

もしクラスベースのアプローチが好みであれば、サービスプロバイダーの中で登録して下さい。本質的にどのアプローチが「正しい」というものではなく、アプリケーションのサイズに基づき、皆さんが好ましいと感じるアプローチを選んで下さい。

ワイルドカードリスナー

ワイルドカードイベントリスナーを登録する

イベントリスナーを登録する時、アスタリスクを用い、ワイルドカードリスナーを指定することができます。

Event::listen('foo.*', function($param)
{
    // このイベントを処理する...
});

この場合、リスナーはfoo.で始まるイベント全部を処理します。

実際にどのイベントが発行されたのかを調べるために、Event::firedメソッドが使用できます。

Event::listen('foo.*', function($param)
{
    if (Event::firing() == 'foo.bar')
    {
        //
    }
});

リスナークラスを使用する

イベントハンドラーにクロージャーではなく、クラスを使用したい場合もあるでしょう。クラスのイベントハンドラーはLaravelのIoCコンテナによりインスタンスが解決され、これによりリスナーに依存性を注入できる利点があります。

クラスリスナーを登録する

Event::listen('auth.login', 'LoginHandler');

イベントリスナークラスを定義する

デフォルトでは、LoginHandlerクラスのhandleメソッドが呼び出されます。

class LoginHandler {

    public function handle($data)
    {
        //
    }

}

リッスンに使用するメソッドを指定する

もしデフォルトのhandleメソッドを使用したくないのでしたら、使用するメソッドを指定してください。

Event::listen('auth.login', 'LoginHandler@onLogin');

イベントキュー

イベントキューに登録する

queueflushメソッドで、イベントを発行させる"キュー"に登録することができますが、即時に発行されるわけではありません。

Event::queue('foo', array($user));

フラッシャーを実行し、全てのキューイベントをフラッシュするにはflushメソッドを使用してください。

Event::flush('foo');

イベント購読クラス

イベント購読クラスを定義する

イベント購読クラスは一つのクラスで多くのイベントをリッスンするためのものです。購買クラスは、イベントデスパッチャーインスタンスが渡されるsubscribeメソッドを実装しなくてはなりません。

class UserEventHandler {

    /**
     * ユーザーログインイベント処理
     */
    public function onUserLogin($event)
    {
        //
    }

    /**
     * ユーザーログアウトイベント処理
     */
    public function onUserLogout($event)
    {
        //
    }

    /**
     * イベント購入リスナーの登録
     *
     * @param  Illuminate\Events\Dispatcher  $events
     * @return array
     */
    public function subscribe($events)
    {
        $events->listen('auth.login', 'UserEventHandler@onUserLogin');

        $events->listen('auth.logout', 'UserEventHandler@onUserLogout');
    }

}

イベント購入クラスを登録する

イベント購読クラスを定義したら、Eventクラスで登録しましょう。

$subscriber = new UserEventHandler;

Event::subscribe($subscriber);

また、LaravelのIoCコンテナを使用し、購読クラスを解決したい場合もあるでしょう。その場合でも、ただsubscribeメソッドへ、購読クラスの登録名を渡すだけです。

Event::subscribe('UserEventHandler');

ドキュメント章別ページ

Artisan CLI

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

バージョン

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる