|
@@ -45,25 +45,36 @@ class WritingUtils
|
|
|
{
|
|
|
$qs = '';
|
|
|
foreach ($cleanQueryParams as $paramName => $value) {
|
|
|
- if (!is_array($value)) {
|
|
|
- $qs .= "$paramName=" . urlencode($value) . "&";
|
|
|
+ $qs .= static::printSingleQueryParamsAsString('', $paramName, $value, true);
|
|
|
+ }
|
|
|
+
|
|
|
+ return rtrim($qs, '&');
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function printSingleQueryParamsAsString(string $prefix, string|int $key, mixed $parameters, bool $firstLevel): string
|
|
|
+ {
|
|
|
+ if (!is_array($parameters)) {
|
|
|
+ if ($firstLevel) {
|
|
|
+ return sprintf("%s=%s&", urlencode($key), urlencode($parameters));
|
|
|
} else {
|
|
|
- if (count($value) == 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (array_keys($value)[0] === 0) {
|
|
|
- // List query param (eg filter[]=haha should become "filter[]": "haha")
|
|
|
- $qs .= "$paramName" . '[]=' . urlencode($value[0]) . '&';
|
|
|
+ if (is_string($key)) {
|
|
|
+ return sprintf("%s[%s]=%s&", $prefix, urlencode($key), urlencode($parameters));
|
|
|
} else {
|
|
|
- // Hash query param (eg filter[name]=john should become "filter[name]": "john")
|
|
|
- foreach ($value as $item => $itemValue) {
|
|
|
- $qs .= "$paramName" . '[' . urlencode($item) . ']=' . urlencode($itemValue) . '&';
|
|
|
- }
|
|
|
+ return sprintf("%s[]=%s&", $prefix, urlencode($parameters));
|
|
|
}
|
|
|
}
|
|
|
+ } else {
|
|
|
+ if ($firstLevel) {
|
|
|
+ $newPrefix = urlencode($key);
|
|
|
+ } else {
|
|
|
+ $newPrefix = sprintf("%s[%s]", $prefix, urlencode($key));
|
|
|
+ }
|
|
|
+ $query = '';
|
|
|
+ foreach ($parameters as $item => $itemValue) {
|
|
|
+ $query .= static::printSingleQueryParamsAsString($newPrefix, $item, $itemValue, false);
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- return rtrim($qs, '&');
|
|
|
+ return $query;
|
|
|
}
|
|
|
|
|
|
/**
|