Skip to content

Commit 7237d87

Browse files
committed
Refactor LocalizedUrlGenerator
1 parent db984c8 commit 7237d87

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

src/LocalizedUrlGenerator.php

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,23 @@ public function __construct()
4545
*/
4646
public function generateFromRequest($locale = null, $parameters = null, $absolute = true)
4747
{
48-
$url = UrlBuilder::make(Request::fullUrl());
49-
$locale = $locale ?: $this->detectLocale($url);
48+
$urlBuilder = UrlBuilder::make(Request::fullUrl());
49+
$locale = $locale ?: $this->detectLocale($urlBuilder);
50+
$parameters = $this->prepareParameters($locale, $parameters ?: $this->getRouteParameters());
5051

5152
if ( ! $this->is404()) {
52-
$parameters = $parameters ?: $this->route->parameters();
53-
$url->setPath($this->replaceParameters($this->route->uri(), $parameters, $locale));
53+
$urlBuilder->setPath($this->replaceParameters($this->route->uri(), $parameters, $locale));
5454
}
5555

5656
if ( ! $this->hasCustomDomains() && ($this->is404() || $this->isLocalized())) {
57-
$url->setSlugs($this->updateLocaleInSlugs($url->getSlugs(), $locale));
57+
$urlBuilder->setSlugs($this->updateLocaleInSlugs($urlBuilder->getSlugs(), $locale));
5858
}
5959

6060
if ($domain = $this->getCustomDomain($locale)) {
61-
$url->setHost($domain);
61+
$urlBuilder->setHost($domain);
6262
}
6363

64-
return $url->build($absolute);
64+
return $urlBuilder->build($absolute);
6565
}
6666

6767
/**
@@ -260,15 +260,13 @@ protected function updateLocaleInSlugs(array $slugs, $locale)
260260
* Replace parameter placeholders with their value.
261261
*
262262
* @param string $uri
263-
* @param mixed $parameters
263+
* @param array $parameters
264264
* @param string $locale
265265
*
266266
* @return string
267267
*/
268268
protected function replaceParameters($uri, $parameters, $locale)
269269
{
270-
$parameters = $this->prepareParameters($locale, $parameters);
271-
272270
preg_match_all('/{([a-z_.-]+)}/', $uri, $matches);
273271
$paramKeys = $matches[1] ?? [];
274272

@@ -309,6 +307,16 @@ protected function prepareParameters($locale, $parameters)
309307
return $parameters;
310308
}
311309

310+
/**
311+
* Get the current route's parameters.
312+
*
313+
* @return array
314+
*/
315+
protected function getRouteParameters()
316+
{
317+
return $this->routeExists() ? $this->route->parameters() : [];
318+
}
319+
312320
/**
313321
* Get the localized route key from a model.
314322
*

0 commit comments

Comments
 (0)