Contao\Frontend::getRootPageFromUrl PHP Метод

getRootPageFromUrl() публичный статический Метод

Try to find a root page based on language and URL
public static getRootPageFromUrl ( ) : PageModel
Результат PageModel
    public static function getRootPageFromUrl()
    {
        // HOOK: add custom logic
        if (isset($GLOBALS['TL_HOOKS']['getRootPageFromUrl']) && is_array($GLOBALS['TL_HOOKS']['getRootPageFromUrl'])) {
            foreach ($GLOBALS['TL_HOOKS']['getRootPageFromUrl'] as $callback) {
                /** @var PageModel $objRootPage */
                if (is_object($objRootPage = static::importStatic($callback[0])->{$callback[1]}())) {
                    return $objRootPage;
                }
            }
        }
        $host = \Environment::get('host');
        // The language is set in the URL
        if (\Config::get('addLanguageToUrl') && !empty($_GET['language'])) {
            $objRootPage = \PageModel::findFirstPublishedRootByHostAndLanguage($host, \Input::get('language'));
            // No matching root page found
            if ($objRootPage === null) {
                \System::log('No root page found (host "' . $host . '", language "' . \Input::get('language') . '")', __METHOD__, TL_ERROR);
                throw new NoRootPageFoundException('No root page found');
            }
        } else {
            $accept_language = \Environment::get('httpAcceptLanguage');
            // Always load the language fall back root if "doNotRedirectEmpty" is enabled
            if (\Config::get('addLanguageToUrl') && \Config::get('doNotRedirectEmpty')) {
                $accept_language = '-';
            }
            // Find the matching root pages (thanks to Andreas Schempp)
            $objRootPage = \PageModel::findFirstPublishedRootByHostAndLanguage($host, $accept_language);
            // No matching root page found
            if ($objRootPage === null) {
                \System::log('No root page found (host "' . \Environment::get('host') . '", languages "' . implode(', ', \Environment::get('httpAcceptLanguage')) . '")', __METHOD__, TL_ERROR);
                throw new NoRootPageFoundException('No root page found');
            }
            // Redirect to the website root or language root (e.g. en/)
            if (\Environment::get('relativeRequest') == '') {
                if (\Config::get('addLanguageToUrl') && !\Config::get('doNotRedirectEmpty')) {
                    $arrParams = array('_locale' => $objRootPage->language);
                    $strUrl = \System::getContainer()->get('router')->generate('contao_index', $arrParams);
                    $strUrl = substr($strUrl, strlen(\Environment::get('path')) + 1);
                    static::redirect($strUrl, 301);
                } else {
                    $objPage = \PageModel::findFirstPublishedByPid($objRootPage->id);
                    // Redirect if it is not the language fall back page and the alias is "index" (see #8498)
                    if ($objPage !== null && (!$objRootPage->fallback || $objPage->alias != 'index')) {
                        static::redirect($objPage->getFrontendUrl(), 302);
                    }
                }
            }
        }
        return $objRootPage;
    }