Skip to content

Commit 8b65782

Browse files
authored
Merge pull request #116 from carspending/master
Refactor so that persistence is extendable.
2 parents 973f61c + 93d1bed commit 8b65782

File tree

1 file changed

+38
-21
lines changed

1 file changed

+38
-21
lines changed

UrlManager.php

Lines changed: 38 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -353,21 +353,7 @@ protected function processLocaleUrl($normalized)
353353
Yii::$app->language = $language;
354354
Yii::trace("Language code found in URL. Setting application language to '$language'.", __METHOD__);
355355
if ($this->enableLanguagePersistence) {
356-
Yii::$app->session[$this->languageSessionKey] = $language;
357-
Yii::trace("Persisting language '$language' in session.", __METHOD__);
358-
if ($this->languageCookieDuration) {
359-
$cookie = new Cookie(array_merge(
360-
['httpOnly' => true],
361-
$this->languageCookieOptions,
362-
[
363-
'name' => $this->languageCookieName,
364-
'value' => $language,
365-
'expire' => time() + (int) $this->languageCookieDuration,
366-
]
367-
));
368-
Yii::$app->getResponse()->getCookies()->add($cookie);
369-
Yii::trace("Persisting language '$language' in cookie.", __METHOD__);
370-
}
356+
$this->persistLanguage($language);
371357
}
372358

373359
// "Reset" case: We called e.g. /fr/demo/page so the persisted language was set back to "fr".
@@ -380,12 +366,7 @@ protected function processLocaleUrl($normalized)
380366
} else {
381367
$language = null;
382368
if ($this->enableLanguagePersistence) {
383-
$language = Yii::$app->session->get($this->languageSessionKey);
384-
$language!==null && Yii::trace("Found persisted language '$language' in session.", __METHOD__);
385-
if ($language===null) {
386-
$language = $this->_request->getCookies()->getValue($this->languageCookieName);
387-
$language!==null && Yii::trace("Found persisted language '$language' in cookie.", __METHOD__);
388-
}
369+
$language = $this->loadPersistedLanguage();
389370
}
390371
if ($language===null && $this->enableLanguageDetection) {
391372
foreach ($this->_request->getAcceptableLanguages() as $acceptable) {
@@ -420,6 +401,42 @@ protected function processLocaleUrl($normalized)
420401
}
421402
}
422403

404+
/**
405+
* @param string $language the language code to persist in session and cookie
406+
*/
407+
protected function persistLanguage($language)
408+
{
409+
Yii::$app->session[$this->languageSessionKey] = $language;
410+
Yii::trace("Persisting language '$language' in session.", __METHOD__);
411+
if ($this->languageCookieDuration) {
412+
$cookie = new Cookie(array_merge(
413+
['httpOnly' => true],
414+
$this->languageCookieOptions,
415+
[
416+
'name' => $this->languageCookieName,
417+
'value' => $language,
418+
'expire' => time() + (int) $this->languageCookieDuration,
419+
]
420+
));
421+
Yii::$app->getResponse()->getCookies()->add($cookie);
422+
Yii::trace("Persisting language '$language' in cookie.", __METHOD__);
423+
}
424+
}
425+
426+
/**
427+
* @return string|null the persisted language code or null if none found
428+
*/
429+
protected function loadPersistedLanguage()
430+
{
431+
$language = Yii::$app->session->get($this->languageSessionKey);
432+
$language!==null && Yii::trace("Found persisted language '$language' in session.", __METHOD__);
433+
if ($language===null) {
434+
$language = $this->_request->getCookies()->getValue($this->languageCookieName);
435+
$language!==null && Yii::trace("Found persisted language '$language' in cookie.", __METHOD__);
436+
}
437+
return $language;
438+
}
439+
423440
/**
424441
* Tests whether the given code matches any of the configured languages.
425442
*

0 commit comments

Comments
 (0)