protected function registerDispatcher() { $this->di->set('dispatcher', function () { $dispatcher = new Dispatcher(); $dispatcher->setDefaultNamespace('Cronmonitor\\Controllers'); $eventsManager = new \Phalcon\Events\Manager(); $eventsManager->attach('dispatch:beforeExecuteRoute', new Security()); $eventsManager->attach('dispatch:beforeException', new NotFound()); $dispatcher->setEventsManager($eventsManager); return $dispatcher; }); }
public function testModelsMysql() { require 'unit-tests/config.db.php'; if (empty($configMysql)) { $this->markTestSkipped('Test skipped'); return; } $di = $this->_getDI(); $tracer = array(); $di->set('db', function () use(&$tracer) { require 'unit-tests/config.db.php'; $eventsManager = new Phalcon\Events\Manager(); $connection = new Phalcon\Db\Adapter\Pdo\Mysql($configMysql); $eventsManager->attach('db', function ($event, $connection) use(&$tracer) { if ($event->getType() == 'beforeQuery') { $tracer[] = $connection->getSqlStatement(); } }); $connection->setEventsManager($eventsManager); return $connection; }, true); $this->_executeTestsNormal($di, $tracer); $tracer = array(); $this->_executeTestsRenamed($di, $tracer); }
public function registerServices(DiInterface $di) { $di['dispatcher'] = function () { $eventsManager = new \Phalcon\Events\Manager(); //Attach a listener $eventsManager->attach("dispatch:beforeException", function ($event, $dispatcher, $exception) { //controller or action doesn't exist if ($exception instanceof \Phalcon\Mvc\Dispatcher\Exception) { $dispatcher->forward(array('controller' => 'error', 'action' => 'error404')); return false; } switch ($exception->getCode()) { case \Phalcon\Dispatcher::EXCEPTION_HANDLER_NOT_FOUND: case \Phalcon\Dispatcher::EXCEPTION_ACTION_NOT_FOUND: $dispatcher->forward(array('controller' => 'error', 'action' => 'error404')); return false; } }); $dispatcher = new Dispatcher(); $dispatcher->setDefaultNamespace("Modules\\Frontend\\Controllers"); $dispatcher->setEventsManager($eventsManager); return $dispatcher; }; $di['view'] = function () { $view = new View(); $view->setViewsDir(__DIR__ . '/views/'); $view->setLayoutsDir('../../common/layout_frontend/'); return $view; }; }
public function _executeTests($connection) { $eventsManager = new Phalcon\Events\Manager(); $listener = new DbProfilerListener(); $eventsManager->attach('db', $listener); $connection->setEventsManager($eventsManager); $connection->query("SELECT TOP 3 * FROM personas"); $profiler = $listener->getProfiler(); $this->assertEquals($profiler->getNumberTotalStatements(), 1); $profile = $profiler->getLastProfile(); $this->assertEquals(get_class($profile), 'Phalcon\\Db\\Profiler\\Item'); $this->assertEquals("SELECT TOP 3 * FROM personas", $profile->getSQLStatement()); $this->assertEquals(gettype($profile->getInitialTime()), "double"); $this->assertEquals(gettype($profile->getFinalTime()), "double"); $this->assertEquals(gettype($profile->getTotalElapsedSeconds()), "double"); $this->assertTrue($profile->getFinalTime() > $profile->getInitialTime()); $connection->query("SELECT TOP 100 * FROM personas"); $this->assertEquals($profiler->getNumberTotalStatements(), 2); $profile = $profiler->getLastProfile(); $this->assertEquals(get_class($profile), 'Phalcon\\Db\\Profiler\\Item'); $this->assertEquals($profile->getSQLStatement(), "SELECT TOP 100 * FROM personas"); $this->assertTrue($profile->getFinalTime() > $profile->getInitialTime()); $connection->query("SELECT TOP 5 * FROM personas"); $connection->query("SELECT TOP 10 * FROM personas"); $connection->query("SELECT TOP 15 * FROM personas"); $this->assertEquals(count($profiler->getProfiles()), 5); $this->assertEquals($profiler->getNumberTotalStatements(), 5); $this->assertEquals(gettype($profiler->getTotalElapsedSeconds()), "double"); $this->assertEquals($profiler->getPoints(), 0); $profiler->reset(); $this->assertEquals(count($profiler->getProfiles()), 0); $this->assertEquals($profiler->getNumberTotalStatements(), 0); }
protected function _prepareDI(&$trace) { Phalcon\DI::reset(); $eventsManager = new Phalcon\Events\Manager(); $eventsManager->attach('model', function ($event, $model) use(&$trace) { if (!isset($trace[$event->getType()][get_class($model)])) { $trace[$event->getType()][get_class($model)] = 1; } else { $trace[$event->getType()][get_class($model)]++; } }); $di = new Phalcon\DI(); $di->set('modelsManager', function () use($eventsManager) { $modelsManager = new Phalcon\Mvc\Model\Manager(); $modelsManager->setEventsManager($eventsManager); return $modelsManager; }, true); $di->set('modelsMetadata', function () { return new Phalcon\Mvc\Model\Metadata\Memory(); }, true); $di->set('db', function () { require 'unit-tests/config.db.php'; //return new Phalcon\Db\Adapter\Pdo\Mysql($configMysql); return new Twm\Db\Adapter\Pdo\Mssql($configMssql); }, true); }
/** * Register specific services for the module * * @package base-app * @version 2.0 * * @param object $di dependency Injector * * @return void */ public function registerServices(\Phalcon\DiInterface $di) { //Registering a dispatcher $di->set('dispatcher', function () { //Create/Get an EventManager $eventsManager = new \Phalcon\Events\Manager(); //Attach a listener $eventsManager->attach("dispatch", function ($event, $dispatcher, $exception) { //controller or action doesn't exist if ($event->getType() == 'beforeException') { switch ($exception->getCode()) { case \Phalcon\Dispatcher::EXCEPTION_HANDLER_NOT_FOUND: case \Phalcon\Dispatcher::EXCEPTION_ACTION_NOT_FOUND: $dispatcher->forward(array('controller' => 'index', 'action' => 'notFound')); return false; } } }); $dispatcher = new \Phalcon\Mvc\Dispatcher(); //Set default namespace to documentation module $dispatcher->setDefaultNamespace("Baseapp\\Documentation\\Controllers"); //Bind the EventsManager to the dispatcher $dispatcher->setEventsManager($eventsManager); return $dispatcher; }); //Registering the view component $di->set('view', function () use($di) { $view = new \Phalcon\Mvc\View(); $view->setViewsDir(__DIR__ . '/views/'); $view->registerEngines(\Baseapp\Library\Tool::registerEngines($view, $di)); return $view; }); }
/** * @param \Phalcon\DiInterface $di */ public function registerServices(\Phalcon\DiInterface $di = null) { // Set up MVC dispatcher. $controller_class = 'Modules\\' . $this->_module_class_name . '\\Controllers'; $di['dispatcher'] = function () use($controller_class) { $eventsManager = new \Phalcon\Events\Manager(); $eventsManager->attach("dispatch:beforeDispatchLoop", function ($event, $dispatcher) { // Set odd/even pairs as the key and value of parameters, respectively. $keyParams = array(); $params = $dispatcher->getParams(); foreach ($params as $position => $value) { if (is_int($position)) { if ($position & 1) { $keyParams[$params[$position - 1]] = urldecode($value); } } else { // The "name" parameter is internal to routes. if ($position != 'name') { $keyParams[$position] = urldecode($value); } } } $dispatcher->setParams($keyParams); // Detect filename in controller and convert to "format" parameter. $controller_name = $dispatcher->getControllerName(); if (strstr($controller_name, '.') !== false) { list($controller_clean, $format) = explode('.', $controller_name, 2); $dispatcher->setControllerName($controller_clean); $dispatcher->setParam('format', $format); } // Detect filename in action and convert to "format" parameter. $action_name = $dispatcher->getActionName(); if (strstr($action_name, '.') !== false) { list($action_clean, $format) = explode('.', $action_name, 2); $dispatcher->setActionName($action_clean); $dispatcher->setParam('format', $format); } }); $dispatcher = new \Phalcon\Mvc\Dispatcher(); $dispatcher->setEventsManager($eventsManager); $dispatcher->setDefaultNamespace($controller_class); return $dispatcher; }; // Set up module-specific configuration. $module_base_name = strtolower($this->_module_class_name); $module_config = $di->get('module_config'); $di->setShared('current_module_config', function () use($module_base_name, $module_config) { if (isset($module_config[$module_base_name])) { return $module_config[$module_base_name]; } else { return null; } }); // Set up the view component and shared templates. $views_dir = 'modules/' . $module_base_name . '/views/scripts/'; $di['view'] = function () use($views_dir) { return \FA\Phalcon\View::getView(array('views_dir' => $views_dir)); }; }
public function initialize() { $eventsManager = new \Phalcon\Events\Manager(); $eventsManager->attach('model', function ($event, $robot) { return true; }); $this->setEventsManager($eventsManager); $this->setSource('parts'); }
protected function _registerListeners() { $eventsManager = new \Phalcon\Events\Manager(); $eventsManager->attach('application', new Engine\Listener()); $this->setEventsManager($eventsManager); $eventsManager = new \Phalcon\Events\Manager(); $eventsManager->attach('dispatch', new Dispatcher\Listener()); $this->di->get(Service::DISPATCHER)->setEventsManager($eventsManager); }
public function testMicroEvents() { $trace = array(); $eventsManager = new Phalcon\Events\Manager(); $eventsManager->attach('micro', function ($event) use(&$trace) { $trace[$event->getType()] = true; }); $app = new Phalcon\Mvc\Micro(); $app->setEventsManager($eventsManager); $app->map('/blog', function () { }); $app->handle('/blog'); $this->assertEquals($trace, array('beforeHandleRoute' => true, 'beforeExecuteRoute' => true, 'afterExecuteRoute' => true, 'afterHandleRoute' => true)); }
public function initialize() { $eventsManager = new \Phalcon\Events\Manager(); //Attach an anonymous function as a listener for "model" events $eventsManager->attach('model', function ($event, $robot) { if ($event->getType() == 'beforeSave') { if ($robot->name == 'Scooby Doo') { echo "Scooby Doo isn't a robot!"; return false; } } return true; }); }
/** * Registers an autoloader related to the module * * @param DiInterface $di */ public function registerAutoloaders(DiInterface $di = null) { $eventsManager = new \Phalcon\Events\Manager(); $loader = new Loader(); $loader->registerNamespaces(array('Phlame\\Core\\Controllers' => __DIR__ . '/controllers/', 'Phlame\\Core\\Models' => __DIR__ . '/models/', 'Phlame\\Core\\Components' => __DIR__ . '/components/')); // Listen all the loader events $eventsManager->attach('loader', function ($event, $loader) { if ($event->getType() == 'beforeCheckPath') { echo 'beforeCheckPath:' . $loader->getCheckedPath() . '<br/>'; } }); $loader->setEventsManager($eventsManager); $loader->register(); }
public function testShouldFireEvents() { $firedEventsCounter = 0; $eventsManager = new \Phalcon\Events\Manager(); $eventsManager->attach('generator:beforeBuild', function (Event $event, Generator $generator) use(&$firedEventsCounter) { $firedEventsCounter++; }); $eventsManager->attach('generator:afterBuild', function (Event $event, Generator $generator) use(&$firedEventsCounter) { $firedEventsCounter++; }); $eventsManager->attach('generator:beforeRender', function (Event $event, Generator $generator) use(&$firedEventsCounter) { $firedEventsCounter++; }); $eventsManager->attach('generator:afterRender', function (Event $event, Generator $generator) use(&$firedEventsCounter) { $firedEventsCounter++; }); $generator = new \Vegas\ApiDoc\Generator(APP_ROOT . '/app/modules', ['match' => '/(.*)Controller(.*)\\.php/i', 'verbose' => false]); $generator->setEventsManager($eventsManager); $generator->build(); $generator->setRenderer(new FakeRenderer()); $generator->render(); $this->assertInstanceOf('\\Phalcon\\Events\\Manager', $generator->getEventsManager()); $this->assertSame(4, $firedEventsCounter); }
/** * Prepares component * * @param stdClass $database */ public static function setup($database) { $adapter = '\\Phalcon\\Db\\Adapter\\Pdo\\' . $database->adapter; self::$_connection = new $adapter(array('host' => $database->host, 'username' => $database->username, 'password' => $database->password, 'dbname' => $database->name)); $profiler = new \Phalcon\Mvc\Model\Migration\Profiler(); $eventsManager = new \Phalcon\Events\Manager(); $eventsManager->attach('db', function ($event, $connection) use($profiler) { if ($event->getType() == 'beforeQuery') { $profiler->startProfile($connection->getSQLStatement()); } if ($event->getType() == 'afterQuery') { $profiler->stopProfile(); } }); self::$_connection->setEventsManager($eventsManager); }
public static function initDb() { $config = \Phalcon\DI::getDefault()->get('config'); $connection = new \Phalcon\Db\Adapter\Pdo\Mysql($config->database->toArray()); if (getenv('APPLICATION_ENV') == 'devel') { $eventsManager = new \Phalcon\Events\Manager(); $eventsManager->attach('db', function ($event, $connection) { if ($event->getType() == 'beforeQuery') { //Start a profile with the active connection error_log($connection->getSQLStatement() . "\n" . json_encode($connection->getSQLVariables())); } }); $connection->setEventsManager($eventsManager); } return $connection; }
/** * Registra os serviços específicos para este módulo */ public function registerServices($di) { //Registra o dispatcher $di->set('dispatcher', function () { $dispatcher = new \Phalcon\Mvc\Dispatcher(); $eventManager = new \Phalcon\Events\Manager(); $eventManager->attach('dispatch', new \Acl('backend')); $dispatcher->setEventsManager($eventManager); $dispatcher->setDefaultNamespace("Multiple\\Backend\\Controllers\\"); return $dispatcher; }); //Registra os diretórios das views $di->set('view', function () { $view = new \Phalcon\Mvc\View(); $view->setViewsDir('../apps/backend/views/'); return $view; }); }
public static function enableDbProfiling($di, $connection) { $eventsManager = new \Phalcon\Events\Manager(); //从di中获取共享的profiler实例 $profiler = $di->getProfiler(); //监听所有的db事件 $eventsManager->attach('db', function ($event, $connection) use($profiler) { //一条语句查询之前事件,profiler开始记录sql语句 if ($event->getType() == 'beforeQuery') { $profiler->startProfile($connection->getSQLStatement()); } //一条语句查询结束,结束本次记录,记录结果会保存在profiler对象中 if ($event->getType() == 'afterQuery') { $profiler->stopProfile(); } }); $connection->setEventsManager($eventsManager); }
/** * Register the services here to make them general or register in the ModuleDefinition to make them module-specific */ public function registerServices($di) { //Registering a dispatcher $di->set('dispatcher', function () { $dispatcher = new \Phalcon\Mvc\Dispatcher(); //Attach a event listener to the dispatcher $eventManager = new \Phalcon\Events\Manager(); $eventManager->attach('dispatch', new \Acl('frontend')); $dispatcher->setEventsManager($eventManager); $dispatcher->setDefaultNamespace("Multiple\\Frontend\\Controllers\\"); return $dispatcher; }); //Registering the view component $di->set('view', function () { $view = new \Phalcon\Mvc\View(); $view->setViewsDir('../apps/frontend/views/'); return $view; }); }
/** * view register function for tests * * @param \Phalcon\Mvc\ViewBaseInterface $view new class instance * @return \Phalcon\Mvc\ViewBaseInterface */ function testViewRegister(\Phalcon\Mvc\ViewBaseInterface $view) { $view->setViewsDir('views/'); $eventsManager = new \Phalcon\Events\Manager(); // // For XML debug // if ($_GET['debug'] == 1) { $eventsManager->attach('view:beforeRender', function ($event, \Phalcon\Mvc\ViewBaseInterface $view) { header('Content-Type: text/plain;charset=utf-8'); echo XSLT::createXmlFromArray((array) $view->getParamsToView(), 'variables')->saveXML(); exit; }); } $view->setEventsManager($eventsManager); $view->registerEngines(array('.xsl' => '\\Z\\Phalcon\\Mvc\\View\\Engine\\XSLT', '.xsl' => function ($view, $di) { $engine = new XSLT($view, $di); $engine->setOptions(array('phpFunctions' => array('ucfirst'))); return $engine; })); return $view; }
/** * Register the services here to make them general or register in the ModuleDefinition to make them module-specific */ public function registerServices($di) { //Registering a dispatcher $di->set('dispatcher', function () { $dispatcher = new Dispatcher(); //Attach a event listener to the dispatcher $eventManager = new \Phalcon\Events\Manager(); $eventManager->attach('dispatch', new \Acl('frontend')); $dispatcher->setEventsManager($eventManager); $dispatcher->setDefaultNamespace("Multiple\\Frontend\\Controllers\\"); return $dispatcher; }); //Registering the view component $di->set('view', function () { $view = new \Phalcon\Mvc\View(); $view->setViewsDir('../apps/frontend/views/'); return $view; }); $di->set('db', function () { return new Database(array("host" => "localhost", "username" => "root", "password" => "secret", "dbname" => "invo")); }); }
<?php $di->set('view', function () { //Create an events manager $eventsManager = new Phalcon\Events\Manager(); //Attach a listener for type "view" $eventsManager->attach("view", function ($event, $view) { echo $event->getType(), ' - ', $view->getActiveRenderPath(), PHP_EOL; }); $view = new \Phalcon\Mvc\View(); $view->setViewsDir("../app/views/"); //Bind the eventsManager to the view component $view->setEventsManager($eventsManager); return $view; }, true);
<?php //Registering the collectionManager service $di->set('collectionManager', function () { $eventsManager = new Phalcon\Events\Manager(); // Attach an anonymous function as a listener for "model" events $eventsManager->attach('collection', function ($event, $model) { if (get_class($model) == 'Robots') { if ($event->getType() == 'beforeSave') { if ($model->name == 'Scooby Doo') { echo "Scooby Doo isn't a robot!"; return false; } } } return true; }); // Setting a default EventsManager $modelsManager = new Phalcon\Mvc\Collection\Manager(); $modelsManager->setEventsManager($eventsManager); return $modelsManager; }, true);
$eventManager->attach('micro', function ($event, $app) use($mysqli) { global $authinfo; if ($event->getType() == 'beforeHandleRoute') { // The server should have the TLS client certificate information and the remote peer address // If not, just fail early if (!array_key_exists("VERIFIED", $_SERVER) || $_SERVER['VERIFIED'] != "SUCCESS" || !array_key_exists("DN", $_SERVER) || strlen($_SERVER['DN']) == 0 || !array_key_exists("REMOTE_ADDR", $_SERVER) || strlen($_SERVER['REMOTE_ADDR']) == 0) { $response = new Phalcon\Http\Response(); $response->setStatusCode(401, "Unauthorized"); //Send errors to the client $response->setJsonContent(array('status' => 'ERROR', 'messages' => array('Missing/Wrong TLS client certificate'))); $response->send(); return false; } elseif ($mysqli->connect_errno != 0) { $response = new Phalcon\Http\Response(); //Change the HTTP status $response->setStatusCode(503, "Service Unavailable"); //Send errors to the client $response->setJsonContent(array('status' => 'ERROR', 'messages' => array('No DB connection (' . $mysqli->connect_errno . ': ' . $mysqli->connect_error . ')'))); $response->send(); return false; } // Now we need to check the peer is a known/allowed hub (via its client certificate and the remote address) $cacheserial = sha1($_SERVER['DN']); $cacheserial2 = sha1($_SERVER['REMOTE_ADDR']); $cachefnam = CACHEFOLDER . sprintf("dashninja_cmd_hubcheck_%s_%s", $cacheserial, $cacheserial2); $cachevalid = is_readable($cachefnam) && filemtime($cachefnam) + 7200 >= time(); if ($cachevalid) { $data = unserialize(file_get_contents($cachefnam)); $result = $data["result"]; $authinfo = $data["authinfo"]; } else { $sql = "SELECT HubId, HubEnabled, HubDescription FROM cmd_hub WHERE HubCertificate = '%s' AND HubIPv6 = inet6_aton('%s')"; $sqlx = sprintf($sql, $mysqli->real_escape_string($_SERVER['DN']), $mysqli->real_escape_string($_SERVER['REMOTE_ADDR'])); $result = $mysqli->query($sqlx); if ($result !== false) { // If the query is a success, we retrieve the first result (should be the only one) $authinfo = $result->fetch_assoc(); $result->close(); } $data = array("result" => $result, "authinfo" => $authinfo); file_put_contents($cachefnam, serialize($data), LOCK_EX); } // If the query failed, something is wrong with MySQL // Means we are out of business if ($result === false) { $response = new Phalcon\Http\Response(); $response->setStatusCode(503, "Service Unavailable"); $response->setJsonContent(array('status' => 'ERROR', 'messages' => array($mysqli->errno . ': ' . $mysqli->error))); $response->send(); $authinfo = false; return false; } else { // If the query result is null, then the remote peer is NOT authorized if (is_null($authinfo)) { $response = new Phalcon\Http\Response(); $response->setStatusCode(401, "Unauthorized"); $response->setJsonContent(array('status' => 'ERROR', 'messages' => array('TLS client certificate did not match a known hub'))); $response->send(); $authinfo = false; return false; } elseif ($authinfo['HubEnabled'] != '1') { $response = new Phalcon\Http\Response(); $response->setStatusCode(401, "Unauthorized"); $response->setJsonContent(array('status' => 'ERROR', 'messages' => array('Hub is disabled (Access denied)'))); $response->send(); return false; } // We passed! Peer is authorized! } } });
return $volt; }, '.phtml' => 'Phalcon\\Mvc\\View\\Engine\\Php')); return $view; }, true); $di->set('dispatcher', function () use($di) { //Create/Get an EventManager $eventsManager = new Phalcon\Events\Manager(); //Attach a listener $eventsManager->attach("dispatch", function ($event, $dispatcher, $exception) { //The controller exists but the action not if ($event->getType() == 'beforeNotFoundAction') { $dispatcher->forward(array('controller' => 'error', 'action' => 'error404')); return false; } //Alternative way, controller or action doesn't exist if ($event->getType() == 'beforeException') { switch ($exception->getCode()) { case Phalcon\Dispatcher::EXCEPTION_HANDLER_NOT_FOUND: case Phalcon\Dispatcher::EXCEPTION_ACTION_NOT_FOUND: $dispatcher->forward(array('controller' => 'error', 'action' => 'error404')); return false; } } }); $securityPlugin = new SecurityPlugin($di); $eventsManager->attach("dispatch", $securityPlugin); $dispatcher = new Phalcon\Mvc\Dispatcher(); //Bind the EventsManager to the dispatcher $dispatcher->setEventsManager($eventsManager); return $dispatcher; }, true); /**
<?php //Create an event manager $eventsManager = new Phalcon\Events\Manager(); //Attach a listener for type "acl" $eventsManager->attach("acl", function ($event, $acl) { if ($event->getType() == 'beforeCheckAccess') { echo $acl->getActiveRole(), $acl->getActiveResource(), $acl->getActiveAccess(); } }); $acl = new \Phalcon\Acl\Adapter\Memory(); //Setup the $acl //... //Bind the eventsManager to the acl component $acl->setEventsManager($eventManagers);
/** * Mount the module specific routes before the module is loaded. * Add ModuleRoutes Group and annotated controllers for parsing their routing information. * * @param \Phalcon\DiInterface $di */ public static function initRoutes(DiInterface $di) { $loader = new Loader(); $loader->registerNamespaces(['App\\Modules\\Backend\\Controllers' => __DIR__ . '/Controllers/', 'App\\Modules\\Backend\\Controllers\\API' => __DIR__ . '/Controllers/api/', 'App\\Modules\\Backend\\Models' => __DIR__ . '/Models/', 'App\\Modules\\Backend\\Library' => __DIR__ . '/Lib/', 'App\\Modules\\Frontend\\Controllers' => __DIR__ . '/../Frontend/Controllers/', 'App\\Modules\\Frontend\\Models' => __DIR__ . '/../Frontend/Models/'], TRUE)->register(); /** * Read application wide and module only configurations */ $appConfig = $di->get('config'); $moduleConfig = (include __DIR__ . '/config/config.php'); $di->setShared('moduleConfig', $moduleConfig); /** * The URL component is used to generate all kind of urls in the application */ $di->setShared('url', function () use($appConfig) { $url = new UrlResolver(); $url->setBaseUri($appConfig->application->baseUri); return $url; }); $di->setShared('request', function () use($appConfig) { return new \Phalcon\Http\Request(); }); /** * Read configuration */ include __DIR__ . "/../../config/env/" . $appConfig->application->environment . ".php"; $database = $di->getConfig()->application->site . $di->get('request')->getQuery("countryCode"); /** * Module specific database connection */ $di->set('db', function () use($config, $database) { $eventsManager = new \Phalcon\Events\Manager(); //Create a database listener $dbListener = new MyDBListener(); //Listen all the database events $eventsManager->attach('db', $dbListener); $connection = new \Phalcon\Db\Adapter\Pdo\Mysql(['host' => $config->{$database}->host, 'username' => $config->{$database}->username, 'password' => $config->{$database}->password, 'dbname' => $config->{$database}->dbname, 'options' => array(\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'")]); //Assign the eventsManager to the db adapter instance $connection->setEventsManager($eventsManager); return $connection; }); /** * Simple database connection to localhost */ $di->set('mongo', function () use($config, $database) { $mongo = new \MongoClient(); return $mongo->selectDb($config->{$database}->dbname); }, true); $di->set('collectionManager', function () { return new \Phalcon\Mvc\Collection\Manager(); }, true); /** * Include composer autoloader */ require __DIR__ . "/../../../vendor/autoload.php"; /** * Module specific dispatcher */ $di->set('dispatcher', function () use($di) { $dispatcher = new Dispatcher(); $dispatcher->setDefaultNamespace('App\\Modules\\Backend\\Controllers\\'); return $dispatcher; }); $di->set('utils', function () { require __DIR__ . "/../../Common/Lib/Application/Plugins/Utils.php"; $utils = new Utils(); return $utils; }); /** * If our request contains a body, it has to be valid JSON. This parses the * body into a standard Object and makes that available from the DI. If this service * is called from a function, and the request body is not valid JSON or is empty, * the program will throw an Exception. */ $di->setShared('requestBody', function () { parse_str(file_get_contents("php://input"), $in); // JSON body could not be parsed, throw exception if ($in === null) { throw new HTTPException('There was a problem understanding the data sent to the server by the application.', 409, array('dev' => 'The JSON body sent to the server was unable to be parsed.', 'internalCode' => 'REQ1000', 'more' => '')); } return $in; }); /** * This means we can create listeners that run when an event is triggered. */ $di->setShared('modelsManager', function () use($di, $config, $database) { $eventsManager = new \Phalcon\Events\Manager(); $customModelsManager = new CustomModelsManager(); /** * Attach an anonymous function as a listener for "model" events */ $eventsManager->attach('model', $customModelsManager); /** * Setting a default EventsManager */ $customModelsManager->setEventsManager($eventsManager); return $customModelsManager; }); }
public function testEvents() { $dispatcher = $this->_getDispatcher(); $listener = new DispatcherListener($this); $eventsManager = new Phalcon\Events\Manager(); $eventsManager->attach('dispatch', $listener); $dispatcher->setEventsManager($eventsManager); //Normal flow events $listener->setControllerName('test2'); $listener->setActionName('index'); $dispatcher->setControllerName('test2'); $dispatcher->setActionName('index'); $dispatcher->setParams(array()); $dispatcher->dispatch(); $trace = join('-', $listener->getTrace()); $this->assertEquals($trace, 'beforeDispatch-beforeExecuteRoute-afterInitialize-afterExecuteRoute-afterDispatch'); //Stop at beforeDispatch event $listener->stopAt('beforeDispatch'); $dispatcher->dispatch(); $trace = join('-', $listener->getTrace()); $this->assertEquals($trace, 'beforeDispatch'); //Stop at beforeExecuteRoute event $listener->stopAt('beforeExecuteRoute'); $dispatcher->dispatch(); $trace = join('-', $listener->getTrace()); $this->assertEquals($trace, 'beforeDispatch-beforeExecuteRoute'); $listener->clearTrace(); //Dispatch a not existing action $listener->setActionName('notExists'); $dispatcher->setControllerName('test2'); $dispatcher->setActionName('notExists'); $dispatcher->setParams(array()); $dispatcher->dispatch(); $trace = join('-', $listener->getTrace()); $this->assertEquals($trace, 'beforeDispatch-beforeNotFoundAction'); $listener->clearTrace(); //Dispatching exceptions $listener->setControllerName('nonController'); $listener->setActionName('index'); $listener->setExceptionMessage('NoncontrollerController handler class cannot be loaded'); $listener->setExceptionType('Phalcon\\Mvc\\Dispatcher\\Exception'); $dispatcher->setControllerName('nonController'); $dispatcher->setActionName('index'); $dispatcher->setParams(array()); $dispatcher->dispatch(); $trace = join('-', $listener->getTrace()); $this->assertEquals($trace, 'beforeDispatch-beforeException'); //Still we can't completely stop exceptions $listener->clearTrace(); $listener->resetStop(); //Uncaught exception $listener->setControllerName('test8'); $listener->setActionName('buggy'); $listener->setExceptionMessage("This is an uncaught exception"); $listener->setExceptionType("Exception"); $dispatcher->setControllerName('test8'); $dispatcher->setActionName('buggy'); $dispatcher->setParams(array()); $dispatcher->dispatch(); $trace = join('-', $listener->getTrace()); $this->assertEquals($trace, 'beforeDispatch-beforeExecuteRoute-afterInitialize-beforeException-afterExecuteRoute-afterDispatch'); }
private function initEventManager($di) { $eventsManager = new \Phalcon\Events\Manager(); $dispatcher = new \Phalcon\Mvc\Dispatcher(); $eventsManager->attach("dispatch:beforeDispatchLoop", function ($event, $dispatcher) use($di) { new \YonaCMS\Plugin\CheckPoint($di->get('request')); new \YonaCMS\Plugin\Localization($dispatcher); new \YonaCMS\Plugin\AdminLocalization($di->get('config')); new \YonaCMS\Plugin\Acl($di->get('acl'), $dispatcher, $di->get('view')); new \YonaCMS\Plugin\MobileDetect($di->get('session'), $di->get('view'), $di->get('request')); }); $eventsManager->attach("dispatch:afterDispatchLoop", function ($event, $dispatcher) use($di) { new \Seo\Plugin\SeoManager($dispatcher, $di->get('request'), $di->get('router'), $di->get('view')); new \YonaCMS\Plugin\Title($di); }); // Profiler $registry = $di->get('registry'); if ($registry->cms['PROFILER']) { $profiler = new \Phalcon\Db\Profiler(); $di->set('profiler', $profiler); $eventsManager->attach('db', function ($event, $db) use($profiler) { if ($event->getType() == 'beforeQuery') { $profiler->startProfile($db->getSQLStatement()); } if ($event->getType() == 'afterQuery') { $profiler->stopProfile(); } }); } $db = $di->get('db'); $db->setEventsManager($eventsManager); $dispatcher->setEventsManager($eventsManager); $di->set('dispatcher', $dispatcher); }
/** * "Attaching event listeners by event name fails if preceded by * detachment of all listeners for that type." * * Test contains 4 steps: * - assigning event manager to dummy service with single log event * listener attached * - attaching second log listener * - detaching all log listeners * - attaching different listener * * NOTE: This test looks the same as above but it checks detachAll() * instead of detachAll() method. To be DELETED when detachAll() * will not supported any more. * * @see https://github.com/phalcon/cphalcon/issues/1331 */ public function testBug1331BackwardCompatibility() { $di = new Phalcon\Di(); $di->set('componentX', function () use($di) { $component = new LeDummyComponent(); $eventsManager = new Phalcon\Events\Manager(); $eventsManager->attach('log', $di->get('MyFirstWeakrefListener')); $component->setEventsManager($eventsManager); return $component; }); $di->set('firstListener', 'MyFirstWeakrefListener'); $di->set('secondListener', 'MySecondWeakrefListener'); // ----- TESTING STEP 1 - SIGNLE 'LOG' LISTENER ATTACHED $component = $di->get('componentX'); $logListeners = $component->getEventsManager()->getListeners('log'); $this->assertCount(1, $logListeners); $this->assertInstanceOf('MyFirstWeakrefListener', $logListeners[0]); // ----- TESTING STEP 2 - SECOND 'LOG' LISTENER ATTACHED $component->getEventsManager()->attach('log', $di->get('MySecondWeakrefListener')); $logListeners = $component->getEventsManager()->getListeners('log'); $this->assertCount(2, $logListeners); $firstLister = array_shift($logListeners); $secondLister = array_shift($logListeners); $this->assertInstanceOf('MyFirstWeakrefListener', $firstLister); $this->assertInstanceOf('MySecondWeakrefListener', $secondLister); // ----- TESTING STEP 3 - ALL 'LOG' LISTENER DETACHED $component->getEventsManager()->detachAll('log'); $logListeners = $component->getEventsManager()->getListeners('log'); $this->assertEmpty($logListeners); // ----- TESTING STEP 4 - SINGLE 'LOG' LISTENER ATTACHED SECOND TIME $component->getEventsManager()->attach('log', $di->get('MySecondWeakrefListener')); $logListeners = $component->getEventsManager()->getListeners('log'); $this->assertCount(1, $logListeners); $this->assertInstanceOf('MySecondWeakrefListener', $logListeners[0]); }
protected function _getDI() { Phalcon\DI::reset(); $di = new Phalcon\DI(); $di->set('modelsManager', function () { return new Phalcon\Mvc\Model\Manager(); }); $di->set('modelsMetadata', function () { return new Phalcon\Mvc\Model\Metadata\Memory(); }); $di->set('db', function () { require 'unit-tests/config.db.php'; //return new Twm\Db\Adapter\Pdo\Mssql($configMssql); $connection = new Phalcon\Db\Adapter\Pdo\Mysql($configMysql); $eventsManager = new Phalcon\Events\Manager(); //Listen all the database events $eventsManager->attach('db', function ($event, $connection) { if ($event->getType() == 'beforeQuery') { echo $connection->getSQLStatement(); } }); //Assign the eventsManager to the db adapter instance $connection->setEventsManager($eventsManager); return $connection; }); return $di; }