導入 (Previous) (Next) Event_Dispatcher::getInstance

View this page in Last updated: Sun, 05 Oct 2008
English | Dutch | French | German | Hungarian | Japanese | Polish | Russian | Spanish | Plain HTML

例 -- Event_Dispatcher の使用例

Event_Dispatcher の使用例

以下の例は、より柔軟性に富むアプリケーションを構築するために Event_Dispatcher をどの様に使用するかを例示しています。

例 42-1基本的な例


<?php
require_once 'Event/Dispatcher.php';

/**
 * 認証をシミュレートするためのダミークラス
 */
class Auth
{
    var $_dispatcher null;
    var $_user;

    function Auth(&$dispatcher)
    {
         $this->_dispatcher = &$dispatcher;
    }

    function login($username$password)
    {
        // 認証を行うコードをここに記述する
        // ....
        // $this->_user は User オブジェクトを含んでいるとする

        $this->_dispatcher->post($this->_user'onLogin');
    }
}

function logAuth(&$notification)
{
    $user = &$notification->getNotificationObject();
    $username $user->getUsername();

    // ログファイルに書き込む
    error_log("$username logged in."3'/tmp/auth.log');
}

$dispatcher = &Event_Dispatcher::getInstance();

// ログファイルに書き込むために全ての onLogin イベントをキャッチする
$dispatcher->addObserver('logAuth''onLogin');

$auth = &new Auth($dispatcher);

// ログインをシミュレート
$auth->login($_GET['user'], $_GET['pass']);
?>

この例では、Event_Dispatcher は認証プロセスで オブザーバをフックするために使用されています。 ユーザーが認証された場合は常に onLogin が通知されます。

これはログファイルを書き込んだり、 他のユーザーからアプリケーションを保護するために使用する事が可能です。

例 42-2通知のキャンセル


<?php
require_once 'Event/Dispatcher.php';

/**
 * 認証をシミュレートするためのダミークラス
 */
class Auth
{
    var $_dispatcher null;
    var $_user;

    function Auth(&$dispatcher)
    {
         $this->_dispatcher = &$dispatcher;
    }

    function login($username$password)
    {
        // 認証を行うコードをここに記述する
        // ....
        // $this->_user は User オブジェクトを含んでいるとする

        $notification $this->_dispatcher->post($this->_user'onLogin');

        if ($notification->isNotificationCancelled()) {
            echo "You are not allowed to login";
            $this->_user->logout();
        }
    }
}

function logAuth(&$notification)
{
    $user = &$notification->getNotificationObject();
    $username $user->getUsername();

    // もし特別なユーザーが認証された場合、
    // 通知をキャンセルする
    if ($username === 'foo') {
        $notification->cancelNotification();
    } else {
        // ログファイルに書き込む
        error_log("$username logged in."3'/tmp/auth.log');
    }
}

$dispatcher = &Event_Dispatcher::getInstance();

// ログファイルに書き込むために全ての onLogin イベントをキャッチする
$dispatcher->addObserver('logAuth''onLogin');

$auth = &new Auth($dispatcher);

// ログインをシミュレート
$auth->login($_GET['user'], $_GET['pass']);
?>

この場合、cancelNotification() メソッドは特定のユーザーが認証を行おうとした場合に 通知をキャンセルするために使用されています。

login メソッドは通知がキャンセルされたかどうかをチェックし、 必要な手順を行うよううまく修正されています。

これにより、 独自の認証システムで柔軟性に富んだルールを追加することができます。

導入 (Previous) (Next) Event_Dispatcher::getInstance

Download Documentation Last updated: Sun, 05 Oct 2008
Do you think that something on this page is wrong? Please file a bug report or add a note.
User Notes:
There are no user contributed notes for this page.