/** * {@inheritDoc} */ public function getRoute() { return ContentRouteManager::generateRoute($this->contentRoute, $this->contentRoute->getPath(), $this); }
/** * Returns the corresponding route of the given URL for the locale supplied * If none is found it returns the original route object * * @param $oldUrl * @param $locale * @return array|\Networking\InitCmsBundle\Component\Routing\Route * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException */ public function getTranslationRoute($oldUrl, $locale) { $cookies = $this->request->cookies ? $this->request->cookies->all() : array(); $oldRequest = Request::create($oldUrl, 'GET', array(), $cookies); if ($this->request->getSession()) { $oldRequest->setSession($this->request->getSession()); } try { $request = $this->pageHelper->matchContentRouteRequest($oldRequest); } catch (ResourceNotFoundException $e) { $request = $oldRequest; } if (!($content = $request->get('_content', false))) { try { $route = $this->router->matchRequest(Request::create($oldUrl)); } catch (ResourceNotFoundException $e) { if ($route = $this->router->matchRequest(Request::create('/404'))) { return $route; } throw new NotFoundHttpException(sprintf('Could not find a translation to "%s" for this request"', $locale)); } if (!array_key_exists('_content', $route)) { return $route; } if (!($content = $route['_content'])) { return $route; } } if ($content instanceof PageInterface) { $translation = $content->getAllTranslations()->get($locale); if (is_null($translation)) { //@todo does this make sense, or should we throw an exception return array('_route' => 'networking_init_cms_home'); } //return a contentRoute object $contentRoute = $translation->getContentRoute()->setContent($translation); return ContentRouteManager::generateRoute($contentRoute, $contentRoute->getPath(), ''); } if ($content instanceof PageSnapshotInterface) { $content = $this->pageHelper->unserializePageSnapshotData($content); $translation = $content->getAllTranslations()->get($locale); if ($translation && ($snapshotId = $translation->getId())) { /** @var $snapshot PageSnapshotInterface */ $snapshot = $this->om->getRepository($content->getSnapshotClassType())->findOneBy(array('resourceId' => $snapshotId)); if ($snapshot) { $contentRoute = $snapshot->getRoute(); return ContentRouteManager::generateRoute($contentRoute, $contentRoute->getPath(), ''); } } } if ($this->fallbackRoute) { return $this->fallbackRoute; } if ($route = $this->router->matchRequest(Request::create('/404'))) { return $route; } //no valid translation found throw new NotFoundHttpException(sprintf('Could not find a translation to "%s" for content "%s"', $locale, $content->__toString())); }
/** * @param ContentRoute $contentRoute * @return \Networking\InitCmsBundle\Component\Routing\Route */ protected function getRoute(ContentRoute $contentRoute) { return ContentRouteManager::generateRoute($contentRoute, $contentRoute->getPath(), ''); }