@@ -40,10 +40,7 @@ public function __construct()
40
40
public function generateFromRequest (string $ locale = null , $ parameters = null , bool $ absolute = true , bool $ keepQuery = true ): string
41
41
{
42
42
$ urlBuilder = UrlBuilder::make (Request::fullUrl ());
43
-
44
- if ($ keepQuery === false ) {
45
- $ urlBuilder ->setQueryString ([]);
46
- }
43
+ $ requestQueryString = $ urlBuilder ->getQueryStringArray ();
47
44
48
45
$ currentDomain = $ urlBuilder ->getHost ();
49
46
$ currentLocaleSlug = $ urlBuilder ->getSlugs ()[0 ] ?? null ;
@@ -71,11 +68,9 @@ public function generateFromRequest(string $locale = null, $parameters = null, b
71
68
// $queryStringParameters contains "key" => "value" pairs.
72
69
list ($ routePlaceholders , $ routeParameters , $ queryStringParameters ) = $ this ->extractRouteAndQueryStringParameters ($ routeUri , $ normalizedParameters );
73
70
74
- // If any query string parameters have been passed to this method,
75
- // and we need to keep the query string, set them in the UrlBuilder.
76
- if (count ($ queryStringParameters ) > 0 && $ keepQuery === true ) {
77
- $ urlBuilder ->setQueryString ($ queryStringParameters );
78
- }
71
+ $ urlBuilder ->setQueryString (
72
+ $ this ->determineQueryStringParameters ($ requestQueryString , $ queryStringParameters , $ keepQuery )
73
+ );
79
74
80
75
// Merge the route parameters with the query string parameters, if any.
81
76
$ namedRouteParameters = array_merge ($ routeParameters , $ urlBuilder ->getQueryStringArray ());
@@ -210,6 +205,28 @@ protected function updateLocaleInSlugs(array $slugs, string $locale): array
210
205
return $ slugs ;
211
206
}
212
207
208
+ /**
209
+ * Determine what query string parameters to use.
210
+ *
211
+ * @param array $requestQueryString
212
+ * @param array $queryStringParameters
213
+ * @param bool $keepQuery
214
+ *
215
+ * @return array
216
+ */
217
+ protected function determineQueryStringParameters (array $ requestQueryString , array $ queryStringParameters , bool $ keepQuery ): array
218
+ {
219
+ if ($ keepQuery === false ) {
220
+ return [];
221
+ }
222
+
223
+ if (count ($ queryStringParameters ) > 0 ) {
224
+ return $ queryStringParameters ;
225
+ }
226
+
227
+ return $ requestQueryString ;
228
+ }
229
+
213
230
/**
214
231
* Extract URI parameters and query string parameters.
215
232
*
0 commit comments