codemix\localeurls\UrlManager::createUrl PHP Метод

createUrl() публичный Метод

public createUrl ( $params )
    public function createUrl($params)
    {
        if ($this->ignoreLanguageUrlPatterns) {
            $params = (array) $params;
            $route = trim($params[0], '/');
            foreach ($this->ignoreLanguageUrlPatterns as $pattern => $v) {
                if (preg_match($pattern, $route)) {
                    return parent::createUrl($params);
                }
            }
        }
        if ($this->enableLocaleUrls && $this->languages) {
            $params = (array) $params;
            if (isset($params[$this->languageParam])) {
                $language = $params[$this->languageParam];
                unset($params[$this->languageParam]);
                $languageRequired = true;
            } else {
                $language = Yii::$app->language;
                $languageRequired = false;
            }
            // Do not use prefix for default language to prevent unnecessary redirect if there's no persistence and no detection
            if ($languageRequired && $language === $this->getDefaultLanguage() && !$this->enableDefaultLanguageUrlCode && !$this->enableLanguagePersistence && !$this->enableLanguageDetection) {
                $languageRequired = false;
            }
            $url = parent::createUrl($params);
            // Unless a language was explicitely specified in the parameters we can return a URL without any prefix
            // for the default language, if suffixes are disabled for the default language. In any other case we
            // always add the suffix, e.g. to create "reset" URLs that explicitely contain the default language.
            if (!$languageRequired && !$this->enableDefaultLanguageUrlCode && $language === $this->getDefaultLanguage()) {
                return $url;
            } else {
                $key = array_search($language, $this->languages);
                if (is_string($key)) {
                    $language = $key;
                }
                if (!$this->keepUppercaseLanguageCode) {
                    $language = strtolower($language);
                }
                // Remove any trailing slashes unless one is configured as suffix
                if ($this->suffix !== '/') {
                    if (count($params) !== 1) {
                        $url = preg_replace('#/\\?#', '?', $url);
                    } else {
                        $url = rtrim($url, '/');
                    }
                }
                // /foo/bar -> /de/foo/bar
                // /base/url/foo/bar -> /base/url/de/foo/bar
                // /base/index.php/foo/bar -> /base/index.php/de/foo/bar
                // http://www.example.com/base/url/foo/bar -> http://www.example.com/base/de/foo/bar
                $needle = $this->showScriptName ? $this->getScriptUrl() : $this->getBaseUrl();
                // Check for server name URL
                if (strpos($url, '://') !== false) {
                    if (($pos = strpos($url, '/', 8)) !== false || ($pos = strpos($url, '?', 8)) !== false) {
                        $needle = substr($url, 0, $pos) . $needle;
                    } else {
                        $needle = $url . $needle;
                    }
                }
                $needleLength = strlen($needle);
                return $needleLength ? substr_replace($url, "{$needle}/{$language}", 0, $needleLength) : "/{$language}{$url}";
            }
        } else {
            return parent::createUrl($params);
        }
    }

Usage Example

Пример #1
0
 /** @inheritdoc */
 public function createUrl($params)
 {
     if (isset($params[$this->pageParam]) && in_array($params[$this->pageParam], [0, 1])) {
         unset($params[$this->pageParam]);
     }
     return parent::createUrl($params);
 }