UrlManager is configured as an application component in Application by default.
You can access that instance via Yii::$app->urlManager.
You can modify its configuration by adding an array to your application config under components
as it is shown in the following example:
php
'urlManager' => [
'enablePrettyUrl' => true,
'rules' => [
your rules go here
],
...
]
public function createUrl($params) { $url = parent::createUrl($params); if ($this->enableAppendLang) { $url = MultilangHelper::addLangToUrl($url); } return $url; }
public function actionIndex() { \Yii::$app->language = 'ru-Ru'; $u = new UrlManager(); $newHome = $u->createUrl('items/index'); //var_dump($st);exit(); Yii::$app->homeUrl = $newHome; return $this->goHome(); }
/** * @inheritdoc */ public function createUrl($params) { if (!isset($params['language'])) { $params['language'] = Yii::$app->language; } return parent::createUrl($params); }
/** * Initializes UrlManager. */ public function init() { parent::init(); if (Yii::$app->request->getIsConsoleRequest()) { return true; } //set $this->langBegin is empty $this->setLangBegin(); $request = Yii::$app->getRequest(); $sourcePathInfo = $request->getPathInfo(); $endSlash = ''; if ($this->normalizer !== false) { $pathInfo = $this->normalizer->normalizePathInfo($sourcePathInfo, (string) $this->suffix, $this->normalized); if ($sourcePathInfo !== $pathInfo) { $endSlash = '/'; } } else { $pathInfo = rtrim($sourcePathInfo, '/'); } $suffix = (string) $this->suffix; if ($suffix !== '' && $pathInfo !== '') { $n = strlen($this->suffix); if (substr_compare($pathInfo, $this->suffix, -$n, $n) === 0) { $pathInfo = substr($pathInfo, 0, -$n); if ($pathInfo === '') { // suffix alone is not allowed throw new NotFoundHttpException(Yii::t('yii', 'Page not found.')); } } else { // suffix doesn't match throw new NotFoundHttpException(Yii::t('yii', 'Page not found.')); } } if ($this->enableLang) { if ($pathInfo != '') { if (strpos($pathInfo, '/') !== false) { $segments = explode('/', $pathInfo); $_GET[$this->langParam] = $segments['0']; unset($segments['0']); $pathInfo = join('/', $segments); } else { if (in_array($pathInfo, $this->langBegin)) { $_GET[$this->langParam] = $pathInfo; $pathInfo = ''; } } } else { $_GET[$this->langParam] = reset($this->langBegin); } } $event = new UrlManagerEvent(['pathInfo' => $pathInfo]); $this->trigger(self::EVENT_INIT, $event); if (isset($_GET)) { foreach ($_GET as $k => $v) { $this->gets[$k] = $v; } } $request->setPathInfo($event->pathInfo . $endSlash); $this->_pathInfo = $event->pathInfo; }
public function createUrl($params) { if (isset($params['lang_id'])) { //Если указан идентификатор языка, то делаем попытку найти язык в БД, //иначе работаем с языком по умолчанию $lang = Lang::findOne($params['lang_id']); if ($lang === null) { $lang = Lang::getDefaultLang(); } unset($params['lang_id']); } else { //Если не указан параметр языка, то работаем с текущим языком $lang = Lang::getCurrent(); } //Получаем сформированный URL(без префикса идентификатора языка) $url = parent::createUrl($params); //Добавляем к URL префикс - буквенный идентификатор языка if ($url == '/') { return '/' . $lang->url; } else { if (YII_DEBUG && !empty(Yii::$app->params['mainPathCount'])) { $url_list = explode('/', $url); $mainPath = []; for ($i = 0; $i <= Yii::$app->params['mainPathCount']; $i++) { $mainPath[] = array_shift($url_list); } $url_list = array_merge($mainPath, [$lang->url], $url_list); return join('/', $url_list); } return '/' . $lang->url . $url; } }
public function init() { parent::init(); $event = new UrlRuleCacheEvent(["ruleCache" => $this->_ruleCache, "urlManager" => $this]); $this->trigger(static::EVENT_INIT_RULECACHE, $event); $this->_ruleCache = $event->ruleCache; }
/** * @inheritdoc */ public function createUrl($params) { $params = (array) $params; $language = $this->getLanguage(isset($params['language']) ? $params['language'] : self::DEFAULT_KEY); unset($params['language']); return '/' . $language->url . '/' . ltrim(parent::createUrl($params), '/'); }
/** * [createUrl description] * @param [type] $params [description] * @return [type] [description] */ public function createUrl($params) { $defaultLang = Lang::getDefaultLang(); if (isset($params[1]) && isset($params[1]['lang_id'])) { // Если указан идентификатор языка, то делаем попытку найти язык в БД, иначе работаем с языком по умолчанию. $lang = Lang::findOne(['url' => $params[1]['lang_id']]); if ($lang === null) { $lang = $defaultLang; } unset($params[1]['lang_id']); } else { // Если не указан параметр языка, то работаем с текущим языком. $lang = Lang::getCurrent(); } // Получаем сформированный URL(без префикса идентификатора языка). $url = parent::createUrl($params); if ($lang->url == $defaultLang->url) { return $url; } // Добавляем к URL префикс - буквенный идентификатор языка. if ($url == '/') { return '/' . $lang->url; } else { return '/' . $lang->url . $url; } }
public function createUrl($params) { if (isset($params['q'])) { unset($params['q']); } return parent::createUrl($params); }
public function parseRequest($request) { $route = parent::parseRequest($request); // $route = lcfirst(str_replace(' ', '', ucwords(str_replace('-', ' ', $route)))); if ($this->_isExcluded($route[0])) { $requestLang = Yii::$app->lang->getDefault(); } else { if (isset($route[1][$this->languageVar])) { $requestLang = $route[1][$this->languageVar]; } else { if (isset($route[0]) && $route[0] === Yii::$app->defaultRoute) { header('HTTP/1.1 301 Moved Permanently'); header('Location: /' . Yii::$app->lang->get()); exit; } else { throw new HttpException(404, Yii::t('app', 'Page not found')); } } } Yii::$app->language = Yii::$app->lang->get(); if (!Yii::$app->lang->checkLang($requestLang)) { throw new HttpException(404, Yii::t('app', 'Page not found')); } else { if (Yii::$app->language !== $requestLang) { Yii::$app->lang->update($requestLang); } } return $route; }
public function createUrl($params) { if ($this->selectedLanguageIsNotTheDefalutLanguage() && $this->isSelectedLanguageSupported()) { $params['language'] = Yii::$app->language; } return parent::createUrl($params); }
public function createUrl($params) { if (isset($params['title'])) { $params['title'] = $this->clean(self::normal_chars($params['title'])); } return parent::createUrl($params); }
/** * @inheritdoc */ public function createUrl($params) { $params = (array) $params; $localeUrls = Yii::$app->localeUrls; if (isset($params[$this->languageParam])) { $language = $params[$this->languageParam]; unset($params[$this->languageParam]); $languageRequired = true; } else { $language = Yii::$app->language; $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 && !$localeUrls->enableDefaultSuffix && $language === $localeUrls->getDefaultLanguage()) { return $url; } else { $key = array_search($language, $localeUrls->languages); $base = $this->showScriptName ? $this->getScriptUrl() : $this->getBaseUrl(); $length = strlen($base); if (is_string($key)) { $language = $key; } return $length ? substr_replace($url, "{$base}/{$language}", 0, $length) : "/{$language}{$url}"; } }
public function createUrl($params) { if (isset($params['language']) && $params['language'] === false || isset($params[0]) && in_array($params[0], $this->nonMultilingualUrls)) { unset($params['language']); return parent::createUrl($params); } if (Yii::$app->yee->isMultilingual && !empty($this->multilingualRules)) { $languages = array_keys(Yii::$app->yee->displayLanguages); //remove incorrect language param if (isset($params['language']) && !in_array($params['language'], $languages)) { unset($params['language']); } //trying to get language param if (!isset($params['language'])) { if (Yii::$app->session->has('language')) { $language = Yii::$app->session->get('language'); } elseif (isset(Yii::$app->request->cookies['language'])) { $language = Yii::$app->request->cookies['language']->value; } else { $language = Yii::$app->language; } if (in_array($language, $languages)) { Yii::$app->language = $language; } $params['language'] = Yii::$app->yee->getDisplayLanguageShortcode(Yii::$app->language); } } return parent::createUrl($params); }
public function createAbsoluteUrl($params, $scheme = null) { $params = (array) $params; if (!isset($params['language'])) { $params['language'] = Yii::$app->language; } return parent::createAbsoluteUrl($params); }
/** * Creates a URL using the given route and query parameters. * Add lang param before route */ public function createUrl($params) { $params = array_merge(['lang' => $this->currLang], (array) $params); $lang = $params['lang']; if ($this->enablePrettyUrl) { unset($params['lang']); } $url = parent::createUrl($params); return $this->enablePrettyUrl ? '/' . $lang . ($url === '/' ? '' : $url) : $url; }
public function parseRequest($request) { $hostInfo = $request->getHostInfo(); $arr = explode('://', $hostInfo); $host = $arr[1]; $arr = explode('.' . $this->baseDomain, $host); $subDomain = $arr[0]; $request->setQueryParams(array_merge($request->getQueryParams(), [$this->subDomainKey => $subDomain])); return parent::parseRequest($request); }
/** * @inheritdoc */ public function createUrl($params) { $params = (array) $params; $anchor = isset($params['#']) ? $params['#'] : ''; $localeUrls = Yii::$app->localeUrls; if (isset($params[$this->languageParam])) { $language = $params[$this->languageParam]; unset($params[$this->languageParam]); $languageRequired = true; } else { $language = Yii::$app->language; $languageRequired = false; } // if disable param is set return default url if (isset($params[$this->disableLocalesParam])) { unset($params[$this->disableLocalesParam]); return parent::createUrl($params); } $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 && !$localeUrls->enableDefaultSuffix && $language === $localeUrls->getDefaultLanguage()) { return $url; } else { $key = array_search($language, $localeUrls->languages); $base = $this->showScriptName ? $this->getScriptUrl() : $this->getBaseUrl(); $length = strlen($base); if (is_string($key)) { $language = $key; } $parts = parse_url($url); if (isset($parts['scheme'], $parts['host'], $parts['path'])) { if ($length) { $parts['path'] = trim(substr_replace($parts['path'], sprintf('%s/%s', $base, $language), 0, $length), '/'); } else { $parts['path'] = trim(sprintf('%s%s', $language, $parts['path']), '/'); } $fullpath = sprintf('%s://%s/%s%s', $parts['scheme'], $parts['host'], $parts['path'], $this->suffix); if ($anchor) { $fullpath = sprintf('%s#%s', $fullpath, $anchor); } if (isset($parts['query'])) { return sprintf('%s?%s', $fullpath, $parts['query']); } return $fullpath; } if ($length) { $path = substr_replace($url, "{$base}/{$language}", 0, $length); } else { $path = "/{$language}{$url}"; } return $path . $anchor; } }
/** * @param array|string $params * @return string */ public function createUrl($params) { $params = (array) $params; $language = isset($params['language']) ? $params['language'] : Language::getCurrent(); if (!Language::isLanguage($language)) { $language = Language::getCurrent(); } unset($params['route'], $params['language']); $params['0'] = $language . '/' . trim($params['0'], '/'); return parent::createUrl($params); }
public function createUrl($params) { if (empty($params['lang'])) { if (Yii::$app->session->has('lang')) { Yii::$app->language = Yii::$app->session->get('lang', Yii::$app->language); } elseif (Yii::$app->request->cookies->getValue('lang')) { Yii::$app->language = Yii::$app->request->cookies->getValue('lang'); } $params['lang'] = Yii::$app->language; } return parent::createUrl($params); }
/** * createUrl * Adding language parameter to links * * @param array $params * * @return string */ public function createUrl($params) { if (!isset($params['_language'])) { if (Yii::$app->session->has('_language')) { Yii::$app->language = Yii::$app->session->get('_language'); } elseif (Yii::$app->request->cookies->has('_language')) { Yii::$app->language = Yii::$app->request->cookies->get('_language'); } $params['_language'] = Yii::$app->language; } return parent::createUrl($params); }
public function createUrl($params) { if (!isset($params["lang"])) { if (Yii::$app->session->has('lang')) { Yii::$app->language = Yii::$app->session->get('lang'); } elseif (isset(Yii::$app->request->cookies["lang"])) { Yii::$app->language = Yii::$app->request->cookies["lang"]->value; } else { $params['lang'] = Yii::$app->language; } } return parent::createUrl($params); }
public function createUrl($params) { $langPrefix = ''; if (Yii::$app->getModule('radiata')->activeLanguage->code != Yii::$app->getModule('radiata')->defaultLanguage->code) { $langPrefix = '/' . Yii::$app->getModule('radiata')->activeLanguage->code; } $url = parent::createUrl($params); $parsedUrl = parse_url($url); if (isset($parsedUrl['scheme']) && $parsedUrl['scheme'] != '') { return str_replace($parsedUrl['path'], $langPrefix . $parsedUrl['path'], $url); } else { return $langPrefix . $url; } }
/** @inheritdoc */ public function createUrl($params) { $params = (array) $params; if (array_key_exists($this->languageParam, $params)) { $language = Language::fromAlias($params[$this->languageParam]) ?: Language::getDefault(); } else { $language = Language::fromLocal(\Yii::$app->language) ?: Language::getDefault(); } $params[$this->languageParam] = $language->alias; if (!$this->showDefaultLanguage && $language->alias === Language::getDefault()->alias) { unset($params[$this->languageParam]); } return parent::createUrl($params); }
/** * Creates translated url. * @param array $params * @return string the created URL */ public function createUrl($params) { if (!empty($params[0])) { $route = explode('/', $params[0]); if (isset($route[0]) && !empty($this->languageControllers[$this->language][$route[0]])) { $route[0] = $this->languageControllers[$this->language][$route[0]]; } if (isset($route[1]) && !empty($this->languageActions[$this->language][$route[1]])) { $route[1] = $this->languageActions[$this->language][$route[1]]; } $params[0] = implode('/', $route); } return parent::createUrl($params); }
/** * Parse request and set application language * @param \yii\web\Request $request * @return array|bool */ public function parseRequest($request) { if (count($this->availableLanguages) > 0) { if (preg_match('/\\/(' . implode('|', $this->availableLanguages) . ')(.*)/si', $request->url, $matches)) { Yii::$app->language = $matches[1]; } } $res = parent::parseRequest($request); if (is_array($res)) { if (isset($res[1]['language']) && in_array($res[1]['language'], $this->availableLanguages)) { Yii::$app->language = $res[1]['language']; } } return $res; }
public function createUrl($params) { if (!Yii::$app->has('composition')) { return parent::createUrl($params); } $links = Yii::$app->get('links', false); $composition = Yii::$app->composition->getFull(); $originalParams = $params; $params[0] = $composition . $params[0]; $response = parent::createUrl($params); // we have not found the composition rule matching against rules, so use the original params and try again! if (strpos($response, $params[0]) !== false) { $params = $originalParams; $response = parent::createUrl($params); } else { // now we have to remove the composition informations from the links to make a valid link parsing (read module) $params[0] = str_replace($composition, '', $params[0]); } $params = (array) $params; $moduleName = \luya\helpers\Url::fromRoute($params[0], 'module'); if ($this->getContextNavItemId() && $links !== null) { $link = $links->findOneByArguments(['id' => (int) $this->getContextNavItemId()]); $this->resetContext(); return preg_replace("/{$moduleName}/", $composition . $link['url'], $response, 1); } $context = false; if ($moduleName !== false) { $moduleObject = \yii::$app->getModule($moduleName); if (method_exists($moduleObject, 'setContext') && !empty($moduleObject->context)) { if ($links !== null) { $context = true; $options = $moduleObject->getContextOptions(); $link = $links->findOneByArguments(['id' => (int) $options['navItemId']]); $response = preg_replace("/{$moduleName}/", $composition . $link['url'], $response, 1); } } } if (!$context) { // because the urlCreation of yii returns a realtive url we have to manually add the composition getFull() path. $baseUrl = yii::$app->request->baseUrl; if (empty($baseUrl)) { $response = Url::removeTrailing($composition) . $response; } else { $response = str_replace($baseUrl, Url::trailing($baseUrl) . Url::removeTrailing($composition), $response); } } return $response; }
public function createUrl($params) { // Url's language such as "en" $url_lang = Yii::$app->language; // If isset lang param if (isset($params['x-language-url'])) { // Do not change url if ($params['x-language-url'] === false) { unset($params['x-language-url']); return parent::createUrl($params); } // If exists language $xLang = LangHelper::getLanguageByParam('url', $params['x-language-url']); if ($xLang) { $url_lang = $xLang['url']; } } $current = LangHelper::getLanguageByParam('locale', $url_lang); $isDefault = isset($current['default']) && $current['default']; // Delete if is pretty url if ($this->enablePrettyUrl || $isDefault) { unset($params['x-language-url']); } $url = parent::createUrl($params); if ($current) { // Is curent language // Pretty url if ($this->enablePrettyUrl && !$this->showScriptName) { $pattern = "/^" . preg_quote($this->baseUrl, '/') . "/"; $replaceTo = $this->baseUrl; if (!$isDefault) { $replaceTo .= '/' . $url_lang; } $url = preg_replace($pattern, $replaceTo, $url); } else { if ($this->enablePrettyUrl && $this->showScriptName) { // Pretty url with showScriptName $pattern = "/^" . preg_quote($this->scriptUrl, '/') . "/"; $replaceTo = $this->baseUrl; if (!$isDefault) { $replaceTo .= '/' . $url_lang; } $url = preg_replace($pattern, $replaceTo, $url); } } } return $url; }
public function createUrl($params) { if (isset($params['lang_id'])) { //Если указан идентификатор языка, то делаем попытку найти язык в БД, //иначе работаем с языком по умолчанию $lang = Language::findOne($params['lang_id']); if ($lang === null) { $lang = \Yii::$app->languageManager->getDefault(); } unset($params['lang_id']); } else { //Если не указан параметр языка, то работаем с текущим языком $lang = \Yii::$app->languageManager->getCurrent(); } //Получаем сформированный URL(без префикса идентификатора языка) $url = parent::createUrl($params); if ($lang->is_default) { return $url; } else { if ($url == '/') { return '/' . $lang->url; } elseif (preg_match('/^https?/si', $url)) { return preg_replace('#(^https?:\\/\\/[a-zA-Z0-9\\.]+)#', '$1/' . $lang->url, $url); } else { return '/' . $lang->url . $url; } } }
public function createUrl($params) { $default = Languages::all()->getConfigDefault(); $current = Languages::all()->getConfigCurrent(); $url_prefix = null; if (isset($params['x-language-url']) && !$params['x-language-url']) { $params['x-language-url'] = $default['url']; } if (isset($params['x-language-url']) && Languages::all()->getConfigByParam('url', $params['x-language-url'])) { $url_prefix = $params['x-language-url'] === $default['url'] && $this->multilanguageHideDefaultPrefix ? '' : $params['x-language-url']; unset($params['x-language-url']); } // echo "url_prefix: "; // var_export($url_prefix); // echo "\n"; // // print_r($params); // exit; if ($url_prefix === null) { // Иначе подставляем текущий язык $url_prefix = Yii::$app->request->getLanguageInurl(); } $url = parent::createUrl($params); if ($url_prefix) { $url = '/' . $url_prefix . $url; } return $url; }