Exemplo n.º 1
0
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) {