例 – Event_Dispatcher の使用例

Event_Dispatcher の使用例

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

基本的な例

<?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 が通知されます。

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

通知のキャンセル

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

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

Event_Dispatcher の導入 (Previous) 新規 Event_Dispatcher オブジェクトを生成する (Next)
Last updated: Sat, 25 Oct 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.