AttwFramework 的事件组件

dev-master 2014-09-28 05:42 UTC

This package is auto-updated.

Last update: 2024-09-16 04:21:57 UTC


README

Total Downloads Latest Unstable Version License

AttwFramework 的事件组件.AttwFramework.

测试 ##Composer ###下载

{
    "require": {
        "attwframework/event": "dev-master"
    }
}

###如何使用 ###创建事件 首先,创建一个 Attw\Event\EventManager 的实例

use Attw\Event\EventManager;

$eventManager = EventManager::getInstance();

然后,创建一个监听器。监听器将执行事件的动作。它可以是一个可调用的函数

$eventManager->listen('after_login', function ($event) {
    $params = $event->getParams();
    $username = $params['username'];
    
    echo 'Welcome ' . $username;
});

或者实现 Attw\Event\EventListenerInterface 接口的类

namespace You\Namespace\Event\Listener;

use Attw\Event\EventListenerInterface;

class UserListener implements EventListenerInterface
{
    public function afterLogin(Event $event)
    {
        $params = $event->getParams();
        $username = $params['username'];
    
        echo 'Welcome ' . $username;
    }
}
$eventManager->listen('after_login', 'You\Namespace\Event\Listener\UserListener.afterLogin');

注意: 监听器始终以参数的形式接收事件。

###抛出事件 创建一个 Attw\Event\Event 的实例,并设置监听器所需的参数

use Attw\Event\Event;

$event = new Event();
$event->setParams(array('username' => $user->getName()));

$eventManager->trigger('after_login', $event);

###自定义事件示例

namespace You\Namespace\Event;

use Attw\Event\Event;

class UserEvent extends Event
{
    private $user;

    public function setUsername($username)
    {
        $this->username = $username;
    }
    
    public function getUsername()
    {
        return $this->username;
    }
}

###优先级事件 将优先级顺序的数字作为第三个参数传递。

$eventManager->listen('some_name', 'You\Namespace\Event\Listener\YourListener.methodName1', 2);//The last to be executed
$eventManager->listen('some_name', 'You\Namespace\Event\Listener\YourListener.methodName2', 4);//The first to be executed
$eventManager->listen('some_name', 'You\Namespace\Event\Listener\YourListener.methodName3', 3);//The second to be executed

###移除事件 使用方法 Attw\Event\EventManager::unlisten($name = null, $listener = null)

按名称移除

$eventManager->unlisten('some_name');

按监听器移除(移除此监听器对所有事件的监听)

$eventManager->unlisten(null, 'You\Namespace\Event\Listener\YourListener.methodName');

按名称和监听器移除(移除事件上的监听器)

$eventManager->unlisten('some_name', 'You\Namespace\Event\Listener\YourListener.methodName');