mozart / event-dispatcher
Mozart 事件调度器库
v0.1.5
2013-09-02 07:50 UTC
Requires
- php: >=5.3.10
This package is not auto-updated.
Last update: 2024-09-14 16:43:33 UTC
README
Mozart 事件调度器库
这个事件库来自Mozart Small MVC框架,基于观察者模式实现。
Composer
$ curl -s http://getcomposer.org/installer | php $ php composer.phar install //optional create alias composer $ ln -s composer.phar /usr/bin/composer $ composer install $ composer install --dev // dev-master $ composer require mozart/event-dispatcher // next typing "dev-master"
初始化类组件
<?php require 'vendor/autoload.php' // if youre install this library with composer use Mozart\Library\Event\Event; use Mozart\Library\Event\EventDispatcher; use Mozart\Library\Event\ObjectEvent; use Mozart\Library\Event\Listener\CustomListener;
自定义事件监听器
可选,自定义监听器以在事件上创建默认监听器名称
使用方法
-. 使用数组参数的事件
<?php /** * Example Class ListenerOne { Array Argument } */ class ListenerOne extends CustomListener { public function emailSubscriber(Event $event) { $event->setEvent(CustomListener::EVENT_SUBSCRIBER); echo $event->getEvent(); } } $dispatcher = new EventDispatcher(); /** * Dispatch the event with Array Event Argument */ $listenerOne = new ListenerOne(); $dispatcher->addListener('event.email.subscriber', array($listenerOne, 'emailSubscriber')); $dispatcher->dispatch('event.email.subscriber');
-. 使用闭包的事件
<?php /** * Example Class ListenerTwo */ class ListenerTwo extends CustomListener { public function newsEvent(Event $event) { $event->setEvent(CustomListener::EVENT_NEWS); echo $event->getEvent(); } } /** * Dispatch the event with Closure Event Argument */ $dispatcher->addListener('news.event', function() { $listenerTwo = new ListenerTwo(); echo $listenerTwo->newsEvent(new Event()); }); $dispatcher->dispatch('news.event');
-. 使用对象创建自定义定义的事件
<?php /** * Email Subscriber Listener */ class EmailSubscriberListener { public function sendDelivery(ObjectEvent $event) { if (isset($event['name']) && $event['name'] === 'email.subscriber') { return $event['name']; } $event['send']; } } $objectEvent = new ObjectEvent( $subject = null, array( 'name' => 'email.subsciber', 'send' => array( 'list' => array( 'faizal_pribadi@aol.com', 'nathan_wahyudi@arcacorp.com' ) ) ) ); $dispatcher->dispatch('email.subscriber', $objectEvent); foreach ($objectEvent['send'] as $emails => $email) { foreach ($email as $listEmail) { echo $listEmail; } }
完整示例请参考示例文件夹
注入调度器
为了注入构造函数EventDispatcher
use Mozart\Library\Event\InjectDispatcher; $inject = new InjectDispatcher($dispatcher)
PHPUnit 测试套件
$ phpunit