public function __invoke(MvcEvent $event) { if ($event->getRouteMatch()->getMatchedRouteName() === 'oauth/authorize' || $event->getRouteMatch()->getMatchedRouteName() === 'oauth/code') { $auth = $this->authentication; if (!$auth->hasIdentity()) { //redirect to login form before granting permissions - exception would be client_credentials grant type $url = $event->getRouter()->assemble([], array('name' => 'dotuser/login')); $host = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'on' ? 'https://' : 'http://'; $host .= $_SERVER['HTTP_HOST']; $url = $host . $url . '?redirect=' . urlencode($event->getRequest()->getUriString()); $response = $event->getResponse(); $response->getHeaders()->addHeaderLine('Location', $url); $response->setStatusCode(302); $response->sendHeaders(); exit; } else { $identity = $auth->getIdentity(); $request = $event->getRequest(); $client_id = $request->getQuery('client_id'); //check to see if user already ganted permissions and is not revoked to skip the step and redirecting directly if ($event->getRouteMatch()->getMatchedRouteName() === 'oauth/authorize') { if ($this->userRevokeStorage->isAuthorized($client_id, $identity->getUsername())) { $newRequest = new \ZF\ContentNegotiation\Request(); $newRequest->setMethod(\Zend\Http\Request::METHOD_POST); $newRequest->getPost()->set('authorized', 'yes'); $event->setRequest($newRequest); } } } } }
/** * @param $controllerName * @param $action * @param array $params * @return string|\Zend\Stdlib\ResponseInterface * @throws \Exception */ public function runControllerAction($controllerName, $action, $params = array()) { $this->event->getRouteMatch()->setParam('controller', $controllerName)->setParam('action', $action); foreach ($params as $key => $value) { $this->event->getRouteMatch()->setParam($key, $value); } $serviceManager = $this->event->getApplication()->getServiceManager(); $controllerManager = $serviceManager->get('ControllerLoader'); /** @var AbstractActionController $controller */ $controller = $controllerManager->get($controllerName); $controller->setEvent($this->event); $result = $controller->dispatch($this->event->getRequest()); if ($result instanceof Response) { return $result; } /** @var ViewManager $viewManager */ $viewManager = $serviceManager->get('ViewManager'); $renderingStrategy = $viewManager->getMvcRenderingStrategy(); $this->event->setViewModel($result); /** @var ViewModel $result */ if (!$result->terminate()) { $layout = new ViewModel(); $layoutTemplate = $renderingStrategy->getLayoutTemplate(); $layout->setTemplate($layoutTemplate); $layout->addChild($result); $this->event->setViewModel($layout); } $response = $renderingStrategy->render($this->event); return $response; }
function boforeDispatch(MvcEvent $event) { $request = $event->getRequest(); $response = $event->getResponse(); $target = $event->getTarget(); /* Offline pages not needed authentication */ $whiteList = array('Auth\\Controller\\Auth-login', 'Auth\\Controller\\Auth-logout', 'Auth\\Controller\\Auth-signup'); $requestUri = $request->getRequestUri(); $controller = $event->getRouteMatch()->getParam('controller'); $action = $event->getRouteMatch()->getParam('action'); $requestedResourse = $controller . "-" . $action; $session = new Container('User'); if ($session->offsetExists('email')) { if (in_array($requestedResourse, $whiteList)) { $url = '/TPWeb/public/produit'; $response->setHeaders($response->getHeaders()->addHeaderLine('Location', $url)); $response->setStatusCode(302); } } else { if (!in_array($requestedResourse, $whiteList)) { $url = '/TPWeb/public/auth'; $response->setHeaders($response->getHeaders()->addHeaderLine('Location', $url)); $response->setStatusCode(302); } $response->sendHeaders(); } //print "Called before any controller action called. Do any operation."; }
public function __invoke(MvcEvent $e) { $response = $e->getResponse(); $this->rateLimitService->consume($e->getRouteMatch(), $e->getRequest()); //var_dump($this->rateLimitService->getTopMeters('daily_limits'));exit; $status = $this->rateLimitService->getLimitStatus($e->getRouteMatch(), $e->getRequest(), 'daily_limits'); if (!empty($status)) { //add info headers $headers = $response->getHeaders(); $headers->addHeaderLine('X-RateLimit-Limit', $status['limit']); $headers->addHeaderLine('X-RateLimit-Remaining', $status['remaining']); $headers->addHeaderLine('X-RateLimit-Reset', $status['reset']); $response->setHeaders($headers); } if ($this->rateLimitService->isLimitExceeded()) { //trigger the ratelimit exceeded event $mvcLimitEvent = $this->mvcLimitEvent; $response = $this->eventManager->trigger(MvcLimitEvent::EVENT_RATELIMIT_EXCEEDED, $mvcLimitEvent, function ($r) { return $r instanceof Response; }); $response = $response->last(); return $response; } elseif ($this->rateLimitService->isLimitWarning()) { //trigger the ratelimit warning event $mvcLimitEvent = $this->mvcLimitEvent; $response = $this->eventManager->trigger(MvcLimitEvent::EVENT_RATELIMIT_WARN, $mvcLimitEvent, function ($r) { return $r instanceof Response; }); $response = $response->last(); $e->setResponse($response); } }
public function checkAcl(MvcEvent $e) { $userRole = 'guest'; $app = $e->getTarget(); $serviceManager = $app->getServiceManager(); $authService = $serviceManager->get('AuthService'); if ($authService->hasIdentity()) { $user = $authService->getStorage()->read(); $userRole = $user->role; } $controller = $e->getRouteMatch()->getMatchedRouteName('controller'); $action = $e->getRouteMatch()->getParam('action'); $route = $controller . '/' . $action; $allAccess = false; if ($e->getViewModel()->acl->hasResource($controller . '/all')) { if ($e->getViewModel()->acl->isAllowed($userRole, $controller . '/all')) { $allAccess = true; } } if (!$allAccess) { if ($e->getViewModel()->acl->hasResource($route)) { if (!$e->getViewModel()->acl->isAllowed($userRole, $route)) { $e->getRouteMatch()->setParam('controller', 'Frontend\\Controller\\Index')->setParam('action', 'index'); } } else { $e->getRouteMatch()->setParam('controller', 'Frontend\\Controller\\Index')->setParam('action', 'index'); } } }
public function getActionName(MvcEvent $event) { if (!$event->getRouteMatch()) { return '[unknownAction]'; } return $event->getRouteMatch()->getParam('action'); }
/** * @param mixed $param * @param mixed $default * @return array|mixed|null */ public function fromRoute($param = null, $default = null) { if ($param === null) { return $this->event->getRouteMatch()->getParams(); } return $this->event->getRouteMatch()->getParam($param, $default); }
/** * 路由分发后才能获取controller和action名称 * @param MvcEvent $e */ public function dispatchHandle(MvcEvent $e) { //$serviceManager = $e->getApplication()->getServiceManager(); $viewModel = $e->getApplication()->getMvcEvent()->getViewModel(); $viewModel->controller = $e->getRouteMatch()->getParam("__CONTROLLER__"); $viewModel->action = $e->getRouteMatch()->getParam('action'); }
function boforeDispatch(MvcEvent $event) { include 'config/constant.php'; $response = $event->getResponse(); $controller = $event->getRouteMatch()->getParam('controller'); $module_array = explode("\\", $controller); if ($module_array[0] == 'Admin') { $action = $event->getRouteMatch()->getParam('action'); $requestedResourse = $controller . "\\" . $action; $session = new Container('User'); if ($session->offsetExists('user')) { if (in_array($requestedResourse, $GLOBALS['PAGE_BEFORE_LOGIN'])) { $url = $GLOBALS['SITE_ADMIN_URL'] . 'dashboard/add'; $response->setHeaders($response->getHeaders()->addHeaderLine('Location', $url)); $response->setStatusCode(302); } } else { if ($requestedResourse != 'Admin\\Controller\\Index\\index' && !in_array($requestedResourse, $GLOBALS['PAGE_BEFORE_LOGIN'])) { $url = $GLOBALS['SITE_ADMIN_URL'] . 'index/login'; $response->setHeaders($response->getHeaders()->addHeaderLine('Location', $url)); $response->setStatusCode(302); } $response->sendHeaders(); } } }
/** * Before Dispatch Function * * @param MvcEvent $event */ function boforeDispatch(MvcEvent $event) { $sm = $event->getApplication()->getServiceManager(); $config = $sm->get('Config'); $list = $config['whitelist']; $name = $sm->get('request')->getUri()->getPath(); $controller = $event->getRouteMatch()->getParam('controller'); $action = $event->getRouteMatch()->getParam('action'); $session = new Container('User'); $controller = $event->getRouteMatch()->getParam('controller'); $action = $event->getRouteMatch()->getParam('action'); if (!(strpos($name, 'reset-password') || in_array($name, $list)) && $session->offsetExists('userId')) { $serviceManager = $event->getApplication()->getServiceManager(); $roleTable = $serviceManager->get('RoleTable'); $userRoleTable = $serviceManager->get('UserRoleTable'); $roleID = $userRoleTable->getUserRoles('user_id = ' . $session->offsetGet('userId'), array('role_id')); $roleName = $roleTable->getUserRoles('rid = ' . $roleID[0]['role_id'], array('role_name')); $userRole = $roleName[0]['role_name']; $acl = $serviceManager->get('Acl'); $acl->initAcl(); $status = $acl->isAccessAllowed($userRole, $controller, $action); if (!$status) { die('Permission denied'); } } }
public function onBootstrap(MvcEvent $e) { $eventManager = $e->getApplication()->getEventManager(); $routeCallback = function ($e) { $availableLanguages = array('en-US', 'zh-CN'); $defaultLanguage = 'en-US'; $language = ""; $fromRoute = false; //see if language could be find in url if ($e->getRouteMatch()->getParam('lang')) { $language = $e->getRouteMatch()->getParam('lang'); $fromRoute = true; //or use language from http accept } else { $headers = $e->getApplication()->getRequest()->getHeaders(); if ($headers->has('Accept-Language')) { $headerLocale = $headers->get('Accept-Language')->getPrioritized(); $language = substr($headerLocale[0]->getLanguage(), 0, 2); } } if (!in_array($language, $availableLanguages)) { $language = $defaultLanguage; } $e->getApplication()->getServiceManager()->get('translator')->setLocale($language); }; $eventManager->getSharedManager()->attach(__NAMESPACE__, 'dispatch', function ($e) { $e->getTarget()->layout('layout/admin'); }); $eventManager->attach(\Zend\Mvc\MvcEvent::EVENT_ROUTE, $routeCallback); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); }
public function injectXmlTemplate(MvcEvent $e) { $format = $e->getRouteMatch()->getParam('format', "html"); $channel = $e->getRouteMatch()->getParam('channel', "default"); if ('xml' == $format) { $viewModel = $e->getResult(); if ($viewModel instanceof JsonModel) { return; } $resolver = $e->getApplication()->getServiceManager()->get('ViewResolver'); $templateDefault = $viewModel->getTemplate() . '.xml.phtml'; $templateChannel = $viewModel->getTemplate() . '.' . $channel . '.xml.phtml'; if ($channel != 'default' && $resolver->resolve($templateChannel)) { $viewModel->setTemplate($templateChannel); } elseif ($resolver->resolve($templateDefault)) { $viewModel->setTemplate($templateDefault); } else { } /* * Disable layout. This works because InjectViewModelListener is executed after us. */ $viewModel->setTerminal(true); /* @var Response $response */ $response = $e->getResponse(); $response->getHeaders()->addHeaderLine('Content-Type', 'application/xml'); } }
function boforeDispatch(MvcEvent $event) { $request = $event->getRequest(); $response = $event->getResponse(); $target = $event->getTarget(); $whiteList = array('Auth\\Controller\\Index-index', 'Auth\\Controller\\Index-logout'); $requestUri = $request->getRequestUri(); $controller = $event->getRouteMatch()->getParam('controller'); $action = $event->getRouteMatch()->getParam('action'); $requestedResourse = $controller . "-" . $action; $session = new Container('User'); if ($session->offsetExists('email')) { if ($requestedResourse == 'Auth\\Controller\\Index-index' || in_array($requestedResourse, $whiteList)) { $url = '/'; $response->setHeaders($response->getHeaders()->addHeaderLine('Location', $url)); $response->setStatusCode(302); } else { $serviceManager = $event->getApplication()->getServiceManager(); $userRole = $session->offsetGet('roleName'); $acl = $serviceManager->get('Acl'); $acl->initAcl(); $status = $acl->isAccessAllowed($userRole, $controller, $action); if (!$status) { die('Permission denied'); } } } else { if ($requestedResourse != 'Auth\\Controller\\Index-index' && !in_array($requestedResourse, $whiteList)) { $url = '/login'; $response->setHeaders($response->getHeaders()->addHeaderLine('Location', $url)); $response->setStatusCode(302); } $response->sendHeaders(); } }
/** * @param MvcEvent $evt * @return string[] */ private function getSerializationGroups(MvcEvent $evt) { /** @var ZendRest $zendRestOptions */ $zendRestOptions = $evt->getApplication()->getServiceManager()->get('Aeris\\ZendRestModule\\Options\\ZendRest'); $controllerName = $evt->getRouteMatch()->getParam('controller'); $actionName = $evt->getRouteMatch()->getParam('action'); return $zendRestOptions->getController($controllerName)->getSerializationGroup($actionName); }
/** * Download link. * * @param string $compress 'zip' | 'bz2' | other to make option * @param string $moduleNamespace * * @return string */ public function __invoke($compress = 'zip', $moduleNamespace = '') { if ($moduleNamespace === '') { $controller = $this->mvcEvent->getRouteMatch()->getParam('controller'); $moduleNamespace = substr($controller, 0, strpos($controller, '\\')); } return $this->view->url('download', ['module' => $moduleNamespace, 'compress' => $compress]); }
public function onDispatch(MvcEvent $e) { //Verificamos si no existe una sesion creada if (!SessionManager::sessionExist()) { $e->getRouteMatch()->setParam('controller', 'Auth\\Controller\\Auth'); $e->getRouteMatch()->setParam('action', 'login'); } }
/** * * @param MvcEvent $event */ public function onGuard(MvcEvent $event) { $controllerName = $event->getRouteMatch()->getParam('controller'); $actionName = $event->getRouteMatch()->getParam('action'); if ($this->guard->isGranted(array('controller' => $controllerName, 'action' => $actionName))) { return; } $this->triggerForbiddenEvent($event); }
/** * Event listener to run before page cache, so some operation will also work * if the page is cached. * If this code is added in action, it will be ignored if page is cached. * * @param MvcEvent $e */ public function runBeforePageCache(MvcEvent $e) { $name = $e->getRouteMatch()->getParam('id'); if (empty($name)) { $name = $e->getRouteMatch()->getParam('slug'); } $module = $e->getRouteMatch()->getParam('module'); self::addVisit($name, $module); }
protected function getRouteMatch(MvcEvent $event) { $routeMatch = $event->getRouteMatch(); if (!$routeMatch) { $routeMatch = new RouteMatch(array('home')); $event->setRouteMatch($routeMatch); $routeMatch = $event->getRouteMatch(); } return $routeMatch; }
/** * @param MvcEvent $e * @return Response */ public function preDispatch(MvcEvent $e) { if (!$e->getRouteMatch()->getParam('module') || $e->getRouteMatch()->getParam('module') !== 'install') { $session = new Container('progress_tracker'); $action = Install::getCurrentStep(); $response = new Response(); $response->setStatusCode(302); $response->getHeaders()->addHeaderLine('Location', "/install/index/{$action}"); return $response; } }
public function onDispatch(MvcEvent $e) { $logged_block = array('login', 'register'); if (!$this->identity() && !in_array($e->getRouteMatch()->getParam("action"), $logged_block)) { return $this->redirect()->toRoute('home'); } if ($this->identity() && in_array($e->getRouteMatch()->getParam("action"), $logged_block)) { return $this->redirect()->toRoute('home'); } return parent::onDispatch($e); }
private function dispatchEvent(MvcEvent $e) { // TARGET & SERVICEMANAGER $target = $e->getTarget(); $serviceManager = $e->getApplication()->getServiceManager(); // CONFIG $config = $e->getApplication()->getServiceManager()->get('config'); // TRANSLATOR /** @var Translator $translator */ $translator = $serviceManager->get('MvcTranslator'); // LANG CONFIG $languages = $config['languages']['available']; $fallbackLocale = $config['languages']['fallback']; // ROUTER PARAM LOCALE $routeMatch = $e->getRouteMatch(); if ($routeMatch) { $urlLocale = $routeMatch->getParam('locale'); } else { /** * @todo * evtl hier noch aus der request url versuchen die locale zu lesen */ $urlLocale = $fallbackLocale; } if (strstr($_SERVER['SERVER_NAME'], '.de')) { $urlLocale = 'de'; } else { $urlLocale = 'en'; } // ROUTER /** @var \Zend\Mvc\Router\Http\TreeRouteStack $router */ $router = $e->getRouter(); // check if language is present $usedLocale = isset($languages[$urlLocale]) ? $languages[$urlLocale] : false; $usedLocaleShort = isset($languages[$urlLocale]) ? $urlLocale : false; // language not found redirect to fallback lang if (!$usedLocale && !$usedLocaleShort) { // wrong locale request $e->getRouteMatch()->setParam('locale', $fallbackLocale); $url = $e->getRouter()->assemble($e->getRouteMatch()->getParams(), array('name' => $e->getRouteMatch()->getMatchedRouteName())); $response = $e->getResponse(); $response->getHeaders()->addHeaderLine('Location', $url); $response->setStatusCode(302); $response->sendHeaders(); return $response; } // add current locale as default router param $router->setDefaultParam('locale', $usedLocaleShort); $translator->setLocale($usedLocale); $translator->setFallbackLocale($usedLocale); $translator->addTranslationFile('phpArray', 'vendor/zendframework/zendframework/resources/languages/' . $usedLocaleShort . '/Zend_Validate.php', 'default', $usedLocale); \Locale::setDefault($usedLocale); AbstractValidator::setDefaultTranslator($translator); }
public function onBootstrap(MvcEvent $e) { $e->getApplication()->getEventManager()->attach(MvcEvent::EVENT_DISPATCH, function ($e) { $container = new Container('User'); if ($container->id == null && $e->getRouteMatch()->getMatchedRouteName() != 'login' && $e->getRouteMatch()->getMatchedRouteName() != 'register') { header('Location: /login'); die; } }); $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); }
public function onDispatch(MvcEvent $event) { $routeMatch = $event->getRouteMatch(); $params = $event->getRouteMatch()->getParams(); unset($params['controller']); unset($params['action']); $strParams = []; foreach ($params as $name => $value) { $strParams[] = sprintf('%s = "%s", ', $name, $value); } $strParams = join($strParams); $message = sprintf('%s: dispatch target: "%s:%s": with params: [%s]', __FUNCTION__, $routeMatch->getParam('controller'), $routeMatch->getParam('action'), $strParams); $this->getEventManager()->trigger(new LogEvent($this, $message, Logger::INFO)); }
public static function checkPermission(MvcEvent $e) { $auth = $e->getApplication()->getServiceManager()->get('Zend\\Authentication\\AuthenticationService'); list($module) = explode('\\', $e->getRouteMatch()->getParam('controller')); $isLogin = $e->getRouteMatch()->getMatchedRouteName() === 'login' || $e->getRouteMatch()->getMatchedRouteName() === 'authenticate'; if ($module != 'Scaffolding' && !$auth->hasIdentity() && !$isLogin) { $url = $e->getRouter()->assemble([], ['name' => 'login']); $response = $e->getResponse(); $response->getHeaders()->addHeaderLine('Location', $url); $response->setStatusCode(302); $response->sendHeaders(); return $response; } }
/** * Handle layout titles onDispatch. * * @param MvcEvent $event */ public function setTitleAndTranslation(MvcEvent $event) { $route = $event->getRouteMatch(); $title = $this->service->get('ControllerPluginManager')->get('systemsettings'); $viewHelper = $this->service->get('ViewHelperManager'); $lang = new Container('translations'); $translator = $this->service->get('translator'); /* * Load translations. */ $renderer = $this->service->get('ViewManager')->getRenderer(); $renderer->plugin('formRow')->setTranslator($translator, 'SD_Translations'); $renderer->plugin('formCollection')->setTranslator($translator, 'SD_Translations'); $renderer->plugin('formLabel')->setTranslator($translator, 'SD_Translations'); $renderer->plugin('formSelect')->setTranslator($translator, 'SD_Translations'); $renderer->plugin('formSubmit')->setTranslator($translator, 'SD_Translations'); AbstractValidator::setDefaultTranslator($translator, 'formandtitle'); $translator->setLocale($lang->offsetGet('languageName'))->setFallbackLocale('en'); $viewModel = $event->getViewModel(); $viewModel->setVariable('lang', $translator->getLocale()); /* * Custom flash messenger. */ $msg = $lang->offsetGet('flashMessages'); $viewModel->setVariable('flashMessages', $msg); /* * Load page title */ $action = $route->getParam('post') ? ' - ' . $route->getParam('post') : ucfirst($route->getParam('__CONTROLLER__')); $headTitleHelper = $viewHelper->get('headTitle'); $headTitleHelper->append($title->__invoke('general', 'site_name') . ' ' . $action); }
/** * Test if the content-type received is allowable. * * @param MvcEvent $e * @return null|ApiProblemResponse */ public function onRoute(MvcEvent $e) { if (empty($this->config)) { return; } $controllerName = $e->getRouteMatch()->getParam('controller'); if (!isset($this->config[$controllerName])) { return; } // Only worry about content types on HTTP methods that submit content // via the request body. $request = $e->getRequest(); if (!method_exists($request, 'getHeaders')) { // Not an HTTP request; nothing to do return; } $requestBody = (string) $request->getContent(); if (empty($requestBody)) { return; } $headers = $request->getHeaders(); if (!$headers->has('content-type')) { return new ApiProblemResponse(new ApiProblem(415, 'Invalid content-type specified')); } $contentTypeHeader = $headers->get('content-type'); $matched = $contentTypeHeader->match($this->config[$controllerName]); if (false === $matched) { return new ApiProblemResponse(new ApiProblem(415, 'Invalid content-type specified')); } }
public function setTemplate(MvcEvent $e) { $result = $e->getResult(); $router = $e->getRouteMatch(); $params = $router->getParams(); if (isset($params['__NAMESPACE__']) && isset($params['__CONTROLLER__']) && isset($params['action'])) { $controllerClass = $params['__NAMESPACE__']; $moduleNamespace = substr($controllerClass, strpos($controllerClass, '\\')); $moduleNamespace = substr($moduleNamespace, 1); $moduleNamespace = substr($moduleNamespace, 0, strpos($moduleNamespace, '\\Controller')); $templatePath = __DIR__; $config = $e->getApplication()->getServiceManager()->get('config'); if (isset($config['view_manager']['template_map'])) { $moduleNamespace = strtolower($moduleNamespace . '/' . $params['__CONTROLLER__']); $templatePath = $templatePath . '/view/' . $moduleNamespace . '/' . $params['action'] . '.phtml'; $moduleNamespace = str_replace('\\', '/', $moduleNamespace); $template = $moduleNamespace . '/' . $params['action']; $config['view_manager']['template_map'][$template] = $templatePath; $result->setTemplate($template); } //set Title; if (isset($config['view_manager']['siteName'])) { $siteName = $config['view_manager']['siteName']; } else { $siteName = $moduleNamespace; } $viewHelperManager = $e->getApplication()->getServiceManager()->get('viewHelperManager'); $headTitle = $viewHelperManager->get('headTitle'); $headTitle->setSeparator(' - '); $headTitle->append($params['action']); $headTitle->append($siteName); } }
public function onBootstrap(MvcEvent $e) { // You may not need to do this if you're doing it elsewhere in your // application $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); // $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, function($e) { // $result = $e->getResult(); // $result->setTerminal(TRUE); // // }); $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, array($this, 'onDispatchError'), 100); // $eventManager->attach('dispatch', array($this,'onDispatchError'), 100); $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\\Mvc\\Controller\\AbstractActionController', 'dispatch', function ($e) { $controller = $e->getTarget(); $controllerClass = get_class($controller); $moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\')); $config = $e->getApplication()->getServiceManager()->get('config'); $routeMatch = $e->getRouteMatch(); $actionName = strtolower($routeMatch->getParam('action', 'not-found')); // get the action name if (isset($config['module_layouts'][$moduleNamespace][$actionName])) { $controller->layout($config['module_layouts'][$moduleNamespace][$actionName]); } elseif (isset($config['module_layouts'][$moduleNamespace]['default'])) { $controller->layout($config['module_layouts'][$moduleNamespace]['default']); } }, 100); }
/** * @param \Zend\Mvc\MvcEvent $object * @param array $options * * @return array */ public function format($object, array $options) { $data['route']['name'] = $object->getRouteMatch()->getMatchedRouteName(); $data['route']['params'] = $object->getRouteMatch()->getParams(); $parts = explode('/', $data['route']['name']); $route = $object->getRouter(); $config = $object->getApplication()->getServiceManager()->get('config'); $config = isset($config['router']['routes']) ? $config['router']['routes'] : []; while ($part = array_shift($parts)) { $route->hasRoute($part) and $route = $route->getRoute($part); isset($config[$part]) and $config = $config[$part]; } $data['route']['class'] = get_class($route); $data['route']['assembled'] = $route->getAssembledParams(); $data['event']['error'] = $object->getError(); $data['event']['name'] = $object->getName(); $controllers = []; $definitions = []; $title = '404 Error'; $subtitle = 'Unknown Error'; $context = null; $manager = $object->getApplication()->getServiceManager()->get('ControllerLoader'); switch ($object->getError()) { case Application::ERROR_CONTROLLER_NOT_FOUND: $definitions = $config; $title = $object->getControllerClass(); $subtitle = 'The requested controller cannot be found'; $controllers = $manager->getCanonicalNames(); array_pop($controllers); // because the Sm add the wrong into the list break; case Application::ERROR_CONTROLLER_INVALID: $title = $object->getControllerClass(); $subtitle = $object->getParam('exception')->getMessage(); break; case Application::ERROR_CONTROLLER_CANNOT_DISPATCH: $context = $this->getControllerContext($manager, $data['route']['params']); $subtitle = 'The controller cannot dispatch the request'; $title = $data['route']['params']['controller']; break; } $data['title'] = $title; $data['subtitle'] = $subtitle; $data['route']['definition'] = $definitions; $data['controller']['names'] = $controllers; $data['controller']['context'] = $context; return $data; }