Skip to content

Commit 4518cd5

Browse files
committed
Rebuilding PHP examples, PSR-18
1 parent 2eaa937 commit 4518cd5

File tree

4 files changed

+125
-33
lines changed

4 files changed

+125
-33
lines changed

modules/openapi-generator/src/main/resources/php/libraries/psr-18/api.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -593,13 +593,13 @@ use function sprintf;
593593
$paramFiles = is_array(${{paramName}}) ? ${{paramName}} : [${{paramName}}];
594594
foreach ($paramFiles as $paramFile) {
595595
$formParams['{{baseName}}'][] = \GuzzleHttp\Psr7\try_fopen(
596-
ObjectSerializer::toFormValue($paramFile),
596+
ObjectSerializer::toFormValue('{{baseName}}', $paramFile)['{{baseName}}'],
597597
'rb'
598598
);
599599
}
600600
{{/isFile}}
601601
{{^isFile}}
602-
$formParams['{{baseName}}'] = ObjectSerializer::toFormValue(${{paramName}});
602+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('{{baseName}}', ${{paramName}}));
603603
{{/isFile}}
604604
}
605605
{{/formParams}}

samples/client/petstore/php/psr-18/lib/Api/FakeApi.php

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4002,39 +4002,39 @@ public function testEndpointParametersRequest($number, $double, $pattern_without
40024002

40034003
// form params
40044004
if ($integer !== null) {
4005-
$formParams['integer'] = ObjectSerializer::toFormValue($integer);
4005+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('integer', $integer));
40064006
}
40074007
// form params
40084008
if ($int32 !== null) {
4009-
$formParams['int32'] = ObjectSerializer::toFormValue($int32);
4009+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('int32', $int32));
40104010
}
40114011
// form params
40124012
if ($int64 !== null) {
4013-
$formParams['int64'] = ObjectSerializer::toFormValue($int64);
4013+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('int64', $int64));
40144014
}
40154015
// form params
40164016
if ($number !== null) {
4017-
$formParams['number'] = ObjectSerializer::toFormValue($number);
4017+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('number', $number));
40184018
}
40194019
// form params
40204020
if ($float !== null) {
4021-
$formParams['float'] = ObjectSerializer::toFormValue($float);
4021+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('float', $float));
40224022
}
40234023
// form params
40244024
if ($double !== null) {
4025-
$formParams['double'] = ObjectSerializer::toFormValue($double);
4025+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('double', $double));
40264026
}
40274027
// form params
40284028
if ($string !== null) {
4029-
$formParams['string'] = ObjectSerializer::toFormValue($string);
4029+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('string', $string));
40304030
}
40314031
// form params
40324032
if ($pattern_without_delimiter !== null) {
4033-
$formParams['pattern_without_delimiter'] = ObjectSerializer::toFormValue($pattern_without_delimiter);
4033+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('pattern_without_delimiter', $pattern_without_delimiter));
40344034
}
40354035
// form params
40364036
if ($byte !== null) {
4037-
$formParams['byte'] = ObjectSerializer::toFormValue($byte);
4037+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('byte', $byte));
40384038
}
40394039
// form params
40404040
if ($binary !== null) {
@@ -4043,26 +4043,26 @@ public function testEndpointParametersRequest($number, $double, $pattern_without
40434043
$paramFiles = is_array($binary) ? $binary : [$binary];
40444044
foreach ($paramFiles as $paramFile) {
40454045
$formParams['binary'][] = \GuzzleHttp\Psr7\try_fopen(
4046-
ObjectSerializer::toFormValue($paramFile),
4046+
ObjectSerializer::toFormValue('binary', $paramFile)['binary'],
40474047
'rb'
40484048
);
40494049
}
40504050
}
40514051
// form params
40524052
if ($date !== null) {
4053-
$formParams['date'] = ObjectSerializer::toFormValue($date);
4053+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('date', $date));
40544054
}
40554055
// form params
40564056
if ($date_time !== null) {
4057-
$formParams['dateTime'] = ObjectSerializer::toFormValue($date_time);
4057+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('dateTime', $date_time));
40584058
}
40594059
// form params
40604060
if ($password !== null) {
4061-
$formParams['password'] = ObjectSerializer::toFormValue($password);
4061+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('password', $password));
40624062
}
40634063
// form params
40644064
if ($callback !== null) {
4065-
$formParams['callback'] = ObjectSerializer::toFormValue($callback);
4065+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('callback', $callback));
40664066
}
40674067

40684068
$headers = $this->headerSelector->selectHeaders(
@@ -4371,11 +4371,11 @@ public function testEnumParametersRequest($enum_header_string_array = null, $enu
43714371

43724372
// form params
43734373
if ($enum_form_string_array !== null) {
4374-
$formParams['enum_form_string_array'] = ObjectSerializer::toFormValue($enum_form_string_array);
4374+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('enum_form_string_array', $enum_form_string_array));
43754375
}
43764376
// form params
43774377
if ($enum_form_string !== null) {
4378-
$formParams['enum_form_string'] = ObjectSerializer::toFormValue($enum_form_string);
4378+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('enum_form_string', $enum_form_string));
43794379
}
43804380

43814381
$headers = $this->headerSelector->selectHeaders(
@@ -5317,11 +5317,11 @@ public function testJsonFormDataRequest($param, $param2)
53175317

53185318
// form params
53195319
if ($param !== null) {
5320-
$formParams['param'] = ObjectSerializer::toFormValue($param);
5320+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('param', $param));
53215321
}
53225322
// form params
53235323
if ($param2 !== null) {
5324-
$formParams['param2'] = ObjectSerializer::toFormValue($param2);
5324+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('param2', $param2));
53255325
}
53265326

53275327
$headers = $this->headerSelector->selectHeaders(

samples/client/petstore/php/psr-18/lib/Api/PetApi.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1818,11 +1818,11 @@ public function updatePetWithFormRequest($pet_id, $name = null, $status = null)
18181818

18191819
// form params
18201820
if ($name !== null) {
1821-
$formParams['name'] = ObjectSerializer::toFormValue($name);
1821+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('name', $name));
18221822
}
18231823
// form params
18241824
if ($status !== null) {
1825-
$formParams['status'] = ObjectSerializer::toFormValue($status);
1825+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('status', $status));
18261826
}
18271827

18281828
$headers = $this->headerSelector->selectHeaders(
@@ -2094,7 +2094,7 @@ public function uploadFileRequest($pet_id, $additional_metadata = null, $file =
20942094

20952095
// form params
20962096
if ($additional_metadata !== null) {
2097-
$formParams['additionalMetadata'] = ObjectSerializer::toFormValue($additional_metadata);
2097+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('additionalMetadata', $additional_metadata));
20982098
}
20992099
// form params
21002100
if ($file !== null) {
@@ -2103,7 +2103,7 @@ public function uploadFileRequest($pet_id, $additional_metadata = null, $file =
21032103
$paramFiles = is_array($file) ? $file : [$file];
21042104
foreach ($paramFiles as $paramFile) {
21052105
$formParams['file'][] = \GuzzleHttp\Psr7\try_fopen(
2106-
ObjectSerializer::toFormValue($paramFile),
2106+
ObjectSerializer::toFormValue('file', $paramFile)['file'],
21072107
'rb'
21082108
);
21092109
}
@@ -2384,7 +2384,7 @@ public function uploadFileWithRequiredFileRequest($pet_id, $required_file, $addi
23842384

23852385
// form params
23862386
if ($additional_metadata !== null) {
2387-
$formParams['additionalMetadata'] = ObjectSerializer::toFormValue($additional_metadata);
2387+
$formParams = array_merge($formParams, ObjectSerializer::toFormValue('additionalMetadata', $additional_metadata));
23882388
}
23892389
// form params
23902390
if ($required_file !== null) {
@@ -2393,7 +2393,7 @@ public function uploadFileWithRequiredFileRequest($pet_id, $required_file, $addi
23932393
$paramFiles = is_array($required_file) ? $required_file : [$required_file];
23942394
foreach ($paramFiles as $paramFile) {
23952395
$formParams['requiredFile'][] = \GuzzleHttp\Psr7\try_fopen(
2396-
ObjectSerializer::toFormValue($paramFile),
2396+
ObjectSerializer::toFormValue('requiredFile', $paramFile)['requiredFile'],
23972397
'rb'
23982398
);
23992399
}

samples/client/petstore/php/psr-18/lib/ObjectSerializer.php

Lines changed: 99 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -330,15 +330,28 @@ public static function toHeaderValue($value)
330330
*
331331
* @param string|\SplFileObject $value the value of the form parameter
332332
*
333-
* @return string the form string
333+
* @return array
334334
*/
335-
public static function toFormValue($value)
335+
public static function toFormValue(string $key, mixed $value)
336336
{
337-
if ($value instanceof \SplFileObject) {
338-
return $value->getRealPath();
339-
} else {
340-
return self::toString($value);
337+
$stringable = self::toString($value);
338+
339+
if ($stringable !== null) {
340+
return [$key => $stringable];
341+
} elseif ($value instanceof \SplFileObject) {
342+
return [$key => $value->getRealPath()];
341343
}
344+
345+
$flattened = [];
346+
$result = [];
347+
348+
self::flatten_array(json_decode(json_encode($value), true), $flattened);
349+
350+
foreach ($flattened as $k => $v) {
351+
$result["{$key}{$k}"] = self::toString($v);
352+
}
353+
354+
return $result;
342355
}
343356

344357
/**
@@ -349,12 +362,14 @@ public static function toFormValue($value)
349362
*
350363
* @param float|int|bool|\DateTime $value the value of the parameter
351364
*
352-
* @return string the header string
365+
* @return string|null the header string
353366
*/
354367
public static function toString($value)
355368
{
356369
if ($value instanceof \DateTime) { // datetime in ISO8601 format
357370
return $value->format(self::$dateTimeFormat);
371+
} elseif (!is_scalar($value) && $value !== null) {
372+
return null;
358373
} elseif (is_bool($value)) {
359374
return $value ? 'true' : 'false';
360375
} else {
@@ -614,4 +629,81 @@ public static function buildQuery(array $params, $encoding = PHP_QUERY_RFC3986):
614629

615630
return $qs ? (string) substr($qs, 0, -1) : '';
616631
}
632+
633+
/**
634+
* Flattens an array of Model object and generates an array compatible
635+
* with formdata - a single-level array where the keys use bracket
636+
* notation to signify nested data.
637+
*
638+
* @param \ArrayAccess|array $source
639+
*
640+
* credit: https://github.com/FranBar1966/FlatPHP
641+
*/
642+
private static function flatten_array(
643+
mixed $source,
644+
array &$destination,
645+
string $start = '',
646+
) {
647+
$opt = [
648+
'prefix' => '[',
649+
'suffix' => ']',
650+
'suffix-end' => true,
651+
'prefix-list' => '[',
652+
'suffix-list' => ']',
653+
'suffix-list-end' => true,
654+
];
655+
656+
if (!is_array($source)) {
657+
$source = (array) $source;
658+
}
659+
660+
/**
661+
* array_is_list only in PHP >= 8.1
662+
*
663+
* credit: https://www.php.net/manual/en/function.array-is-list.php#127044
664+
*/
665+
if (!function_exists('array_is_list')) {
666+
function array_is_list(array $array)
667+
{
668+
$i = -1;
669+
670+
foreach ($array as $k => $v) {
671+
++$i;
672+
if ($k !== $i) {
673+
return false;
674+
}
675+
}
676+
677+
return true;
678+
}
679+
}
680+
681+
if (array_is_list($source)) {
682+
$currentPrefix = $opt['prefix-list'];
683+
$currentSuffix = $opt['suffix-list'];
684+
$currentSuffixEnd = $opt['suffix-list-end'];
685+
} else {
686+
$currentPrefix = $opt['prefix'];
687+
$currentSuffix = $opt['suffix'];
688+
$currentSuffixEnd = $opt['suffix-end'];
689+
}
690+
691+
$currentName = $start;
692+
693+
foreach ($source as $key => $val) {
694+
$currentName .= $currentPrefix.$key;
695+
696+
if (is_array($val) && !empty($val)) {
697+
$currentName .= "{$currentSuffix}";
698+
self::flatten_array($val, $destination, $currentName);
699+
} else {
700+
if ($currentSuffixEnd) {
701+
$currentName .= $currentSuffix;
702+
}
703+
$destination[$currentName] = self::toString($val);
704+
}
705+
706+
$currentName = $start;
707+
}
708+
}
617709
}

0 commit comments

Comments
 (0)