/** * @dataProvider routesProvider * * @param $arRoute * @param $strUri * @param $strClassName */ public function testRoutes($arRoute, $strUri, $strClassName) { $this->router->add($arRoute['route'], $arRoute['parameters'])->setName($arRoute['name']); $this->router->handle($strUri); $boolMatched = $this->router->wasMatched(); $this->assertTrue($boolMatched, 'failed to match ' . $strUri); $strRouteName = $this->router->getMatchedRoute()->getName(); $this->assertEquals($arRoute['name'], $strRouteName, 'matched wrong route'); $this->setUpDispatcher(); $this->dispatcher->dispatch(); $strControllerClassName = $this->dispatcher->getControllerClass(); $this->assertEquals($strClassName, $strControllerClassName, 'wrong controller class name'); }
public function dispatch() { try { $controller = parent::dispatch(); } catch (\Exception $e) { $this->forward($this->exceptionPath); if (isset($this->exceptionPath['module'])) { $this->setModuleName($this->exceptionPath['module']); } $this->setControllerName($this->exceptionPath['controller']); $this->setActionName($this->exceptionPath['action']); /** * @todo Change to setParam after fix of Zephir's bug */ $this->setParams(array('exception' => $e)); return $this->dispatch(); } /** * @var $response \Phalcon\Http\Response */ $response = $controller->getDI()->get('response'); $response->setJsonContent($this->getReturnedValue()); /** * @todo Need to fix */ $response->send(); exit; return $controller; }
/** * Dispatch. * Override it to use own logic. * * @throws \Exception * @return object */ public function dispatch() { try { $parts = explode('_', $this->_handlerName); $finalHandlerName = ''; foreach ($parts as $part) { $finalHandlerName .= ucfirst($part); } $this->_handlerName = $finalHandlerName; $this->_actionName = strtolower($this->_actionName); return parent::dispatch(); } catch (\Exception $e) { $this->_handleException($e); if (ENV == ENV_DEVELOPMENT) { throw $e; } else { $id = Exception::logError('Exception', $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString()); $this->getDI()->setShared('currentErrorCode', function () use($id) { return $id; }); } } return parent::dispatch(); }
<?php /** * Created by PhpStorm. * User: rcmonitor * Date: 07.07.15 * Time: 15:46 */ use Phalcon\Di; use Phalcon\Events\Manager; use Phalcon\Mvc\Dispatcher; use Phalcon\Mvc\Router; use Phalcon\Version; $di = new Di\FactoryDefault(); $oRouter = new Router(false); $oRouter->setDI($di); $oRouter->add('/:controller', array('controller' => 1, 'action' => 'index')); $oEventManager = new Manager(); $oEventManager->attach('dispatch:beforeDispatch', function () { return false; }); $oDispatcher = new Dispatcher(); $oDispatcher->setDI($di); $oDispatcher->setEventsManager($oEventManager); $oRouter->handle('/test'); $oDispatcher->setControllerName($oRouter->getControllerName()); $oDispatcher->setActionName($oRouter->getActionName()); $oDispatcher->dispatch(); echo $oDispatcher->getControllerClass() . PHP_EOL; echo Version::get() . PHP_EOL;