Networking\InitCmsBundle\Helper\LanguageSwitcherHelper::getTranslationRoute PHP Method

getTranslationRoute() public method

Returns the corresponding route of the given URL for the locale supplied If none is found it returns the original route object
public getTranslationRoute ( $oldUrl, $locale ) : array | Route
$oldUrl
$locale
return array | Networking\InitCmsBundle\Component\Routing\Route
    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()));
    }