use Efika\EventManager\EventManager; use WebApplication\OutputHandler; /** * An procedural example. This example would also work with complex * nested logic for example in MVC structure. */ require_once __DIR__ . '/../../app/boot/bootstrap.php'; Logger::getInstance()->addMessage('init start'); $outputHandler = new OutputHandler(); $em = new EventManager(); Logger::getInstance()->addMessage('init complete'); Logger::getInstance()->addMessage('attaching start'); //a simple chain //add some lines of text $em->attachEventHandler('onAssignOutput', function () use($outputHandler) { $outputHandler->addContent('Hello World'); $outputHandler->addContent('some lines of code'); })->attachEventHandler('onAssignOutput', function () use($outputHandler) { $outputHandler->addContent('<b>A List of numbers</b>'); $outputHandler->addContent('<ul>'); for ($n = 0; $n < 10; $n++) { $outputHandler->addContent('<li>' . $n . '</li>'); } $outputHandler->addContent('</ul>'); })->attachEventHandler('onDisplayOutput', function () use($outputHandler) { $outputHandler->setHtmlMode(ENT_XHTML); })->attachEventHandler('onBeforeDisplayOutput', function () use($outputHandler) { $outputHandler->setEncoding('ISO-8859-1'); })->attachEventHandler('onBeforeDisplayOutput', function () use($outputHandler) { foreach ($outputHandler->content as $line => $content) { $outputHandler->content[$line] = htmlentities($content, $outputHandler->getHtmlMode(), $outputHandler->getEncoding()); }
// TODO: Implement detach() method. } } function anEventCallbackAsFunction($e) { echo __FUNCTION__ . ': Some logic'; } class CustomObject { function anEventCallbackAsMethod($e) { echo __FUNCTION__ . ': Some logic'; } } echo 'attach aggregate'; $em->attachEventHandler(new CustomEventAggregate()); $em->attachEventHandler('another.events', array('anEventCallbackAsFunction')); $em->attachEventHandler('another.events', array(new CustomObject(), 'anEventCallbackAsMethod')); print_r($em->getEventHandlers()); echo '<b>trigger custom.eventName.foo</b>'; $em->triggerEvent('custom.eventName.foo', [], function ($responses) { print_r($responses); return false; }); echo '<b>trigger custom.eventName.bar</b>'; $em->triggerEvent('custom.eventName.bar', [], function ($responses) { print_r($responses); return false; }); echo '<b>trigger another.events</b>'; $em->triggerEvent('another.events', [], function ($responses) {