/** * {@inheritDoc} */ public function switchInstance(InstanceInterface $instance) { $container = $this->getContainer(); $container->offsetSet('instance', $instance->getId()); $url = $this->router->assemble($this->routeMatch->getParams(), ['name' => $this->routeMatch->getMatchedRouteName()]); $this->redirect($url); }
/** * {@inheritDoc} */ public function switchInstance(InstanceInterface $instance) { if (!array_key_exists('HTTP_HOST', (array) $_SERVER)) { throw new Exception\RuntimeException(sprintf('Host not set.')); } $url = $this->router->assemble($this->routeMatch->getParams(), ['name' => $this->routeMatch->getMatchedRouteName()]); $hostNames = explode('.', $_SERVER['HTTP_HOST']); $tld = $hostNames[count($hostNames) - 2] . "." . $hostNames[count($hostNames) - 1]; $url = 'http://' . $instance->getSubdomain() . '.' . $tld . $url; $this->redirect($url); }
public function onBootstrap(MvcEvent $e) { $callback = function (MvcEvent $event) { $view = $event->getApplication()->getServiceManager()->get('ViewRenderer'); $config = $event->getApplication()->getConfig(); $controller = $event->getTarget(); $rm = $event->getRouteMatch(); if (!$rm instanceof RouteMatch) { $rm = new RouteMatch(array('module' => 'Application', '__NAMESPACE__' => 'Application\\Controller', '__CONTROLLER__' => 'index', 'controller' => 'Application\\Controller\\Index', 'action' => 'index')); } $params = $rm->getParams(); $modulo = ""; if (isset($params['__NAMESPACE__'])) { $paramsArray = explode("\\", $params['__NAMESPACE__']); $modulo = $paramsArray[0]; } $controller = isset($params['__CONTROLLER__']) ? $params['__CONTROLLER__'] : ""; $action = isset($params['action']) ? $params['action'] : null; $app = $event->getParam('application'); $sm = $app->getServiceManager(); $paramsConfig = ['modulo' => strtolower($modulo), 'controller' => strtolower($controller), 'action' => strtolower($action), 'baseHost' => $view->base_path("/"), 'cssStaticHost' => "", 'jsStaticHost' => "", 'statHost' => "", 'eHost' => "", 'statVers' => '?', 'min' => '', 'AppCore' => [], 'AppSandbox' => [], 'AppSchema' => ['modules' => [], 'requires' => []]]; $view->inlineScript()->appendScript("var yOSON=" . json_encode($paramsConfig, JSON_FORCE_OBJECT)); }; $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\\Mvc\\Controller\\AbstractActionController', MvcEvent::EVENT_DISPATCH, $callback, 100); $e->getApplication()->getEventManager()->getSharedManager()->attach('Zend\\Mvc\\Application', MvcEvent::EVENT_DISPATCH_ERROR, $callback, 100); }
/** * Returns whether page should be considered active or not * * This method will compare the page properties against the route matches * composed in the object. * * @param bool $recursive [optional] whether page should be considered * active if any child pages are active. Default is * false. * @return bool whether page should be considered active or not */ public function isActive($recursive = false) { if (!$this->active) { $reqParams = array(); if ($this->routeMatch instanceof RouteMatch) { $reqParams = $this->routeMatch->getParams(); if ($this->routeMatch->getMatchedRouteName() === $this->getRoute()) { $this->active = true; return true; } } $myParams = $this->params; if (null !== $this->controller) { $myParams['controller'] = $this->controller; } else { /** * @todo In ZF1, this was configurable and pulled from the front controller */ $myParams['controller'] = 'index'; } if (null !== $this->action) { $myParams['action'] = $this->action; } else { /** * @todo In ZF1, this was configurable and pulled from the front controller */ $myParams['action'] = 'action'; } if (count(array_intersect_assoc($reqParams, $myParams)) == count($myParams)) { $this->active = true; return true; } } return parent::isActive($recursive); }
/** * {@inheritDoc} */ public function isExcluded() { $matchedRouteName = $this->routeMatch->getMatchedRouteName(); $matchedRouteParams = $this->routeMatch->getParams(); $matchedRoutePath = $this->getRoutePath($matchedRouteParams); foreach ($this->routes as $route) { if (is_string($route) && $route == $matchedRouteName) { return true; } elseif (is_array($route)) { if (isset($route['action']) && $this->getRoutePath($route) == $matchedRoutePath) { return true; } elseif (!isset($route['action']) && $route['controller'] == $matchedRouteParams['controller']) { return true; } } } return false; }
public static function fromRoute(\Zend\Mvc\Router\RouteMatch $route) { $internalRoute = new self(); $internalRoute->setRoute($route->getMatchedRouteName()); $internalRoute->setParams($route->getParams()); if ($_GET) { $internalRoute->setOptions(array('query' => $_GET)); } return $internalRoute; }
/** * Generates a url given the name of a route. * * @see Zend\Mvc\Router\RouteInterface::assemble() * @see Zend\Router\RouteInterface::assemble() * @param string $name Name of the route * @param array $params Parameters for the link * @param array|Traversable $options Options for the route * @param bool $reuseMatchedParams Whether to reuse matched parameters * @return string Url For the link href attribute * @throws Exception\RuntimeException If no RouteStackInterface was * provided * @throws Exception\RuntimeException If no RouteMatch was provided * @throws Exception\RuntimeException If RouteMatch didn't contain a * matched route name * @throws Exception\InvalidArgumentException If the params object was not * an array or Traversable object. */ public function __invoke($name = null, $params = [], $options = [], $reuseMatchedParams = false) { if (null === $this->router) { throw new Exception\RuntimeException('No RouteStackInterface instance provided'); } if (3 == func_num_args() && is_bool($options)) { $reuseMatchedParams = $options; $options = []; } if ($name === null) { if ($this->routeMatch === null) { throw new Exception\RuntimeException('No RouteMatch instance provided'); } $name = $this->routeMatch->getMatchedRouteName(); if ($name === null) { throw new Exception\RuntimeException('RouteMatch does not contain a matched route name'); } } if (!is_array($params)) { if (!$params instanceof Traversable) { throw new Exception\InvalidArgumentException('Params is expected to be an array or a Traversable object'); } $params = iterator_to_array($params); } if ($reuseMatchedParams && $this->routeMatch !== null) { $routeMatchParams = $this->routeMatch->getParams(); if (isset($routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER])) { $routeMatchParams['controller'] = $routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER]; unset($routeMatchParams[ModuleRouteListener::ORIGINAL_CONTROLLER]); } if (isset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE])) { unset($routeMatchParams[ModuleRouteListener::MODULE_NAMESPACE]); } $params = array_merge($routeMatchParams, $params); } $options['name'] = $name; return $this->router->assemble($params, $options); }
/** * Returns whether page should be considered active or not * * This method will compare the page properties against the route matches * composed in the object. * * @param bool $recursive [optional] whether page should be considered * active if any child pages are active. Default is * false. * @return bool whether page should be considered active or not */ public function isActive($recursive = false) { if (!$this->active) { $reqParams = array(); if ($this->routeMatch instanceof RouteMatch) { $reqParams = $this->routeMatch->getParams(); if (isset($reqParams[ModuleRouteListener::ORIGINAL_CONTROLLER])) { $reqParams['controller'] = $reqParams[ModuleRouteListener::ORIGINAL_CONTROLLER]; } $pageParams = $this->params; if (null !== $this->controller) { $pageParams['controller'] = $this->controller; } if (null !== $this->action) { $pageParams['action'] = $this->action; } if (null !== $this->getRoute()) { if ($this->routeMatch->getMatchedRouteName() === $this->getRoute() && count(array_intersect_assoc($reqParams, $pageParams)) == count($pageParams)) { $this->active = true; return $this->active; } else { return parent::isActive($recursive); } } } $pageParams = $this->params; if (null !== $this->controller) { $pageParams['controller'] = $this->controller; } else { /** * @todo In ZF1, this was configurable and pulled from the front controller */ $pageParams['controller'] = 'index'; } if (null !== $this->action) { $pageParams['action'] = $this->action; } else { /** * @todo In ZF1, this was configurable and pulled from the front controller */ $pageParams['action'] = 'index'; } if (count(array_intersect_assoc($reqParams, $pageParams)) == count($pageParams)) { $this->active = true; return true; } } return parent::isActive($recursive); }
/** * Mimics zf1 Request::getParam behavior * * Route match -> GET -> POST */ public static function staticGetParam(RouteMatch $routeMatch, Request $request, $param = null, $default = null) { if ($param === null) { $params = (array) $routeMatch->getParams(); if ($request instanceof ConsoleRequest) { return $params + (array) $request->getParams(); } return $params + $request->getQuery()->toArray() + $request->getPost()->toArray(); } if ($request instanceof ConsoleRequest) { $default = $request->getParam($param, $default); } else { $default = $request->getQuery($param, $request->getPost($param, $default)); } return $routeMatch->getParam($param, $default); }
/** * @param MVCEvent $e MVC event Object * @return Array nombre de module, controller y action con datos adicionales. */ private function getNamesMVC(MvcEvent $e) { $rm = $e->getRouteMatch(); if (!$rm instanceof RouteMatch) { $rm = new RouteMatch(array('module' => 'Application', '__NAMESPACE__' => 'Application\\Controller', '__CONTROLLER__' => 'index', 'controller' => 'Application\\Controller\\Index', 'action' => 'index')); } $params = $rm->getParams(); $modulo = isset($params['__NAMESPACE__']) ? $params['__NAMESPACE__'] : ""; $controller = isset($params['__CONTROLLER__']) ? $params['__CONTROLLER__'] : ""; if (isset($params['controller'])) { $paramsArray = explode("\\", $params['controller']); $modulo = $paramsArray[0]; $controller = $paramsArray[2]; } $action = isset($params['action']) ? $params['action'] : null; return array('modulo' => strtolower($modulo), 'controller' => strtolower($controller), 'action' => strtolower($action), 'min' => '', 'AppCore' => [], 'AppSandbox' => [], 'AppSchema' => ['modules' => [], 'requires' => []]); }
/** * Create a successful RouteResult from the given RouteMatch. * * @param RouteMatch $match * @return RouteResult */ private function marshalSuccessResultFromRouteMatch(RouteMatch $match) { $params = $match->getParams(); if (array_key_exists(self::METHOD_NOT_ALLOWED_ROUTE, $params)) { return RouteResult::fromRouteFailure($this->allowedMethodsByPath[$params[self::METHOD_NOT_ALLOWED_ROUTE]]); } return RouteResult::fromRouteMatch($this->getMatchedRouteName($match->getMatchedRouteName()), $params['middleware'], $params); }
private function prepareParams(RouteMatch $routeMatch, $lang) { $params = $routeMatch->getParams(); $params['lang'] = $lang; // We want to avoid this situation ie. : "/en/auth/login/index" // Otherwise we get: "/en/auth/login", nice and clear if ($params['action'] === 'index') { $params['action'] = null; } // We need to set this, because otherwise we achieve this: // "/en/auth/Module\\Auth\\Controller\\LoginController" $params['controller'] = $params['__CONTROLLER__']; return $params; }
/** * true if the routeMatch passed has the ACCESS_DQL_PARAM_NAME key * as a parameter and the value of the key is an array with elements * or a string that is not empty * * @param RouteMatch $routeMatch * * @return boolean */ private function hasAccessDqlConfig(RouteMatch $routeMatch) { if (array_key_exists(self::ACCESS_DQL_PARAM_NAME, $routeMatch->getParams())) { $paramValue = $routeMatch->getParam(self::ACCESS_DQL_PARAM_NAME); switch (true) { case is_array($paramValue): if (count($paramValue) == 0) { return false; } else { return true; } case is_string($paramValue): if (empty($paramValue)) { return false; } else { return true; } default: return false; } } else { return false; } }
/** * Merge parameters from another match. * * @param RouteMatch $match * @return void */ public function merge(self $match) { $this->params = array_merge($this->params, $match->getParams()); }
public function testSetParam() { $match = new RouteMatch(array()); $match->setParam('foo', 'bar'); $this->assertEquals(array('foo' => 'bar'), $match->getParams()); }
/** * Load comment data for rendering against matched route * * Data array: * - root: [id, ]module, type, item, active * - count * - posts: id, uid, ip, content, time, active * - users: uid, name, avatar, url * - url_list * - url_submit * - url_ajax * * @param RouteMatch|array|string $routeMatch * @param array $options * * @return array|bool */ public function load($routeMatch, array $options = array()) { if ($routeMatch instanceof RouteMatch) { $params = $routeMatch->getParams(); } else { $params = (array) $routeMatch; } $limit = Pi::config('leading_limit', 'comment') ?: 5; // Look up root against route data $root = array(); $module = $params['module']; $controller = $params['controller']; $action = $params['action']; $typeList = Pi::registry('type', 'comment')->read($module, '', null); if (isset($typeList['route'][$controller][$action])) { $lookupList = $typeList['route'][$controller][$action]; } elseif (isset($typeList['locator'])) { $lookupList = $typeList['locator']; } else { return false; } $active = true; $lookup = function ($data) use($params, &$active) { // Look up via locator callback if (!empty($data['locator'])) { $locator = new $data['locator']($params['module']); $item = $locator->locate($params); $active = $data['active']; return $item; } // Look up via route if (!isset($params[$data['identifier']])) { return false; } $item = $params[$data['identifier']]; if ($data['params']) { foreach ($data['params'] as $param => $value) { if (!isset($params[$param]) || $value != $params[$param]) { return false; } } } $active = $data['active']; return $item; }; // Look up against controller-action foreach ($lookupList as $key => $data) { $item = $lookup($data, $active); if ($item) { $root = array('module' => $module, 'type' => $key, 'item' => $item); break; } } if (!$root) { return false; } // Load translations Pi::service('i18n')->load('module/comment:default'); $rootData = $this->getRoot($root); if (!$active) { $root['active'] = 0; $rootData['active'] = 0; } // Check against cache if ($rootData['id']) { $result = Pi::service('comment')->loadCache($rootData['id']); if ($result) { if (Pi::service()->hasService('log')) { Pi::service('log')->info(sprintf('Comment root %d is cached.', $rootData['id'])); } if (!$active) { $result['root']['active'] = 0; } return $result; } } $result = array('root' => $rootData ?: $root, 'count' => 0, 'posts' => array(), 'users' => array(), 'url_list' => '', 'url_submit' => $this->getUrl('submit')); if ($rootData) { $result['count'] = $this->getCount($rootData['id']); //vd($result['count']); if ($result['count']) { $posts = $this->getList($rootData['id'], $limit); $opOption = isset($options['display_operation']) ? $options['display_operation'] : Pi::service('config')->module('display_operation', 'comment'); $avatarOption = isset($options['avatar']) ? $options['avatar'] : 'medium'; $renderOptions = array('target' => false, 'operation' => $opOption, 'user' => array('avatar' => $avatarOption)); $posts = $this->renderList($posts, $renderOptions); $result['posts'] = $posts; $result['url_list'] = $this->getUrl('root', array('root' => $rootData['id'])); $status = Pi::service('comment')->saveCache($rootData['id'], $result); if ($status && Pi::service()->hasService('log')) { Pi::service('log')->info(sprintf('Comment root %d is saved to cache.', $rootData['id'])); } } } return $result; }
/** * @param \Zend\Mvc\Router\RouteMatch $match */ public function genCacheName(RouteMatch $match) { $params = $match->getParams(); $pageId = (int) $params['pageId']; return $pageId; }
/** * Generates valid page cache key * * @param RouteMatch $match * @param string $prefix * @return string */ protected function pageCacheKey(RouteMatch $match, $prefix = 'pagecache_') { return $prefix . str_replace('/', '-', $match->getMatchedRouteName()) . '_' . md5(serialize($match->getParams())); }
/** * Create a succesful RouteResult from the given RouteMatch. * * @param RouteMatch $match * @return RouteResult */ private function marshalSuccessResultFromRouteMatch(RouteMatch $match) { $params = $match->getParams(); $middleware = isset($params['middleware']) ? $params['middleware'] : $this->getMiddlewareFromRoute($match->getMatchedRouteName()); return RouteResult::fromRouteMatch($match->getMatchedRouteName(), $middleware, $params); }
/** * Translate a routematch * Will be used by the Module bootstrap * * @param RouteMatch $routeMatch * @return void */ public function translateRouteMatch(RouteMatch $routeMatch) { $params = $routeMatch->getParams(); $routeName = $routeMatch->getMatchedRouteName(); $result = $this->translate($routeName, self::NAMESPACE_ROUTE_MATCH); if ($result === $routeName) { return; } foreach ($params as $key => $value) { $translateKey = "{$routeName}.{$key}.{$value}"; $result = $this->translate($translateKey, self::NAMESPACE_ROUTE_MATCH); if ($result !== $translateKey) { $routeMatch->setParam($key, $result); } } }