@@ -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