/** * Chains the current request to the public web controller * @return null|\ride\library\mvc\Request */ protected function chainWebRequest() { // not found, try the public controller $arguments = ltrim($this->request->getBasePath(true), '/'); if (!$arguments) { $this->response->setStatusCode(Response::STATUS_CODE_NOT_FOUND); return; } $controller = $this->dependencyInjector->get('ride\\library\\mvc\\controller\\Controller', 'public'); $callback = array($controller, 'indexAction'); $route = new Route('/', $callback); $route->setIsDynamic(true); $route->setArguments(explode('/', $arguments)); $this->request->setRoute($route); $this->response->setStatusCode(Response::STATUS_CODE_OK); return $this->request; }
/** * Dispatches the frontend of a node * @return null */ public function indexAction(Cms $cms, $node, $locale = null) { $siteLocale = null; try { $site = $cms->getCurrentSite($this->request->getBaseUrl(), $siteLocale); } catch (NodeNotFoundException $exception) { // not found, try the public web controller return $this->chainWebRequest(); } $i18n = $this->getI18n(); if ($siteLocale && $locale && $siteLocale != $locale) { // locale inconsistency, not found, try the public web controller return $this->chainWebRequest(); } elseif ($siteLocale) { // set the locale of the site $i18n->setCurrentLocale($siteLocale); } elseif ($locale) { // set the requested locale $i18n->setCurrentLocale($locale); } else { // fallback locale $locale = $i18n->getLocale()->getCode(); } // resolve the node $revision = $site->getRevision(); $site = $site->getId(); if (!$cms->resolveNode($site, $revision, $node)) { return $this->chainWebRequest(); } // chain a request to the frontend callback $nodeType = $cms->getNodeType($node); $callback = $nodeType->getFrontendCallback(); $arguments = ltrim($this->request->getBasePath(true), '/'); $route = new Route('/', $callback); $route->setIsDynamic(true); $route->setArguments(explode('/', $arguments)); $route->setPredefinedArguments(array('site' => $site->getId(), 'node' => $node->getId(), 'locale' => $locale)); $this->request->setRoute($route); $this->response->setStatusCode(Response::STATUS_CODE_OK); return $this->request; }