1. Go to this page and download the library: Download inhere/event library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
inhere / event example snippets
composer
use Inhere\Event\EventManager;
$em = new EventManager();
class ExamListener1
{
public function messageSent(EventInterface $event)
{
echo "handle the event {$event->getName()}\n";
}
}
class ExamListener2
{
public function __invoke(EventInterface $event)
{
echo "handle the event {$event->getName()}\n";
}
}
class ExamHandler implements EventHandlerInterface
{
/**
* @param EventInterface $event
* @return mixed
*/
public function handle(EventInterface $event)
{
// TODO: Implement handle() method.
}
}
/**
* Class EnumGroupListener
* @package Inhere\Event\Examples
*/
class EnumGroupListener implements EventSubscriberInterface
{
const TEST_EVENT = 'test';
const POST_EVENT = 'post';
/**
* 配置事件与对应的处理方法
* @return array
*/
public static function getSubscribedEvents(): array
{
return [
self::TEST_EVENT => 'onTest',
self::POST_EVENT => ['onPost', ListenerPriority::LOW], // 还可以配置优先级
];
}
public function onTest(EventInterface $event)
{
$pos = __METHOD__;
echo "handle the event {$event->getName()} on the: $pos\n";
}
public function onPost(EventInterface $event)
{
$pos = __METHOD__;
echo "handle the event {$event->getName()} on the: $pos\n";
}
}
// a pre-defined event
class MessageEvent extends Event
{
// append property ...
public $message;
}
// in the business
class Mailer
{
use EventManagerAwareTrait;
const EVENT_MESSAGE_SENT = 'messageSent';
public function send($message)
{
// ...发送 $message 的逻辑...
$event = new MessageEvent(self::EVENT_MESSAGE_SENT);
$event->message = $message;
// 事件触发
$this->eventManager->trigger($event);
}
}
$em = new EventManager();
// 绑定事件
$em->attach(Mailer::EVENT_MESSAGE_SENT, 'exam_handler');
$em->attach(Mailer::EVENT_MESSAGE_SENT, function (EventInterface $event)
{
$pos = __METHOD__;
echo "handle the event {$event->getName()} on the: $pos\n";
});
// 这里给它设置了更高的优先级
$em->attach(Mailer::EVENT_MESSAGE_SENT, new ExamListener1(), 10);
$em->attach(Mailer::EVENT_MESSAGE_SENT, new ExamListener2());
$em->attach(Mailer::EVENT_MESSAGE_SENT, new ExamHandler());
$mailer = new Mailer();
$mailer->setEventManager($em);
// 执行,将会触发事件
$mailer->send('hello, world!');
/**
* Class App
* @package Inhere\Event\Examples
*/
class App
{
use EventManagerAwareTrait;
const ON_START = 'app.start';
const ON_STOP = 'app.stop';
const ON_BEFORE_REQUEST = 'app.beforeRequest';
const ON_AFTER_REQUEST = 'app.afterRequest';
public function __construct(EventManager $em)
{
$this->setEventManager($em);
$this->eventManager->trigger(new Event(self::ON_START, [
'key' => 'val'
]));
}
public function run()
{
$sleep = 0;
$this->eventManager->trigger(self::ON_BEFORE_REQUEST);
echo 'request handling ';
while ($sleep <= 3) {
$sleep++;
echo '.';
sleep(1);
}
echo "\n";
$this->eventManager->trigger(self::ON_AFTER_REQUEST);
}
public function __destruct()
{
$this->eventManager->trigger(new Event(self::ON_STOP, [
'key1' => 'val1'
]));
}
}
/**
* Class AppListener
* @package Inhere\Event\Examples
*/
class AppListener
{
public function start(EventInterface $event)
{
$pos = __METHOD__;
echo "handle the event {$event->getName()} on the: $pos\n";
}
public function beforeRequest(EventInterface $event)
{
$pos = __METHOD__;
echo "handle the event {$event->getName()} on the: $pos\n";
}
public function afterRequest(EventInterface $event)
{
$pos = __METHOD__;
echo "handle the event {$event->getName()} on the: $pos\n";
}
public function stop(EventInterface $event)
{
$pos = __METHOD__;
echo "handle the event {$event->getName()} on the: $pos\n";
}
}
/**
* Class EnumGroupListener
* @package Inhere\Event\Examples
*/
class EnumGroupListener implements EventSubscriberInterface
{
const TEST_EVENT = 'test';
const POST_EVENT = 'post';
/**
* 配置事件与对应的处理方法
* @return array
*/
public static function getSubscribedEvents(): array
{
return [
self::TEST_EVENT => 'onTest',
self::POST_EVENT => ['onPost', ListenerPriority::LOW], // 还可以配置优先级
];
}
public function onTest(EventInterface $event)
{
$pos = __METHOD__;
echo "handle the event {$event->getName()} on the: $pos\n";
}
public function onPost(EventInterface $event)
{
$pos = __METHOD__;
echo "handle the event {$event->getName()} on the: $pos\n";
}
}
// 这里使用 方式一
$em = new EventManager();
// register a group listener
$em->attach('app', new AppListener());
// create app
$app = new App($em);
// run.
$app->run();
// AppListener 新增一个方法
class AppListener
{
// ...
public function allEvent(EventInterface $event)
{
$pos = __METHOD__;
echo "handle the event '{$event->getName()}' on the: $pos\n";
}
}
// ...
$em = new EventManager();
$groupListener = new AppListener();
// register a group listener
$em->attach('app', $groupListener);
// all `app.` prefix events will be handled by `AppListener::allEvent()`
$em->attach('app.*', [$groupListener, 'allEvent']);
// create app
$app = new App($em);
// run.
$app->run();
$myEvent = new Event('name', 'target', [ 'some params ...' ]);
// create event class
class MessageEvent extends Event
{
protected $name = 'messageSent';
// append property ...
public $message;
}
text
$ php examples/exam.php
handle the event 'messageSent' on the: ExamListener1::messageSent // 更高优先级的先调用
handle the event 'messageSent' on the: exam_handler
handle the event 'messageSent' on the: {closure}
handle the event 'messageSent' on the: ExamListener2::__invoke
handle the event 'messageSent' on the: Inhere\Event\Examples\ExamHandler::handle
text
$ php examples/named-group.php
handle the event 'app.start' on the: Inhere\Event\Examples\AppListener::start
handle the event 'app.beforeRequest' on the: Inhere\Event\Examples\AppListener::beforeRequest
request handling ....
handle the event 'app.afterRequest' on the: Inhere\Event\Examples\AppListener::afterRequest
handle the event 'app.stop' on the: Inhere\Event\Examples\AppListener::stop
text
$ php examples/named-group.php
handle the event 'app.start' on the: Inhere\Event\Examples\AppListener::start
handle the event 'app.start' on the: Inhere\Event\Examples\AppListener::allEvent
handle the event 'app.beforeRequest' on the: Inhere\Event\Examples\AppListener::beforeRequest
handle the event 'app.beforeRequest' on the: Inhere\Event\Examples\AppListener::allEvent
request handling ....
handle the event 'app.afterRequest' on the: Inhere\Event\Examples\AppListener::afterRequest
handle the event 'app.afterRequest' on the: Inhere\Event\Examples\AppListener::allEvent
handle the event 'app.stop' on the: Inhere\Event\Examples\AppListener::stop
handle the event 'app.stop' on the: Inhere\Event\Examples\AppListener::allEvent
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.