@@ -249,13 +249,14 @@ private function prepareActionParams(Request $request, RouteResult $routeResult)
249
249
}
250
250
elseif ($ actionMethodCacheItem ->hasDefault ())
251
251
{
252
- $ value = $ actionMethodCacheItem ->getDefault ();
252
+ $ result [] = $ actionMethodCacheItem ->getDefault ();
253
+ continue ;
253
254
}
254
255
elseif ($ actionMethodCacheItem ->allowNull ())
255
256
{
256
257
$ value = null ;
257
258
}
258
- elseif (($ type = $ actionMethodCacheItem ->getType ()) && (UploadedFileInterface::class === $ type || is_subclass_of ( $ type , UploadedFileInterface::class)) )
259
+ elseif (($ types = $ actionMethodCacheItem ->getTypes ()) && ActionMethodItem:: TYPE_UPLOADED_FILE === $ types [ 0 ][ ' type ' ] )
259
260
{
260
261
$ uploadedFiles ??= $ request ->getUploadedFiles ();
261
262
if (!isset ($ uploadedFiles [$ paramName ]))
@@ -268,38 +269,64 @@ private function prepareActionParams(Request $request, RouteResult $routeResult)
268
269
{
269
270
throw new \RuntimeException (sprintf ('Upload file failed. error:%d ' , $ value ->getError ()));
270
271
}
272
+ $ result [] = $ value ;
273
+ continue ;
271
274
}
272
275
else
273
276
{
274
277
throw new \InvalidArgumentException (sprintf ('Missing parameter: %s ' , $ paramName ));
275
278
}
276
279
if (null !== $ value )
277
280
{
278
- switch ($ actionMethodCacheItem ->getType () )
281
+ foreach ($ actionMethodCacheItem ->getTypes () as $ type )
279
282
{
280
- case 'int ' :
281
- $ value = (int ) $ value ;
282
- break ;
283
- case 'float ' :
284
- $ value = (float ) $ value ;
285
- break ;
286
- case 'bool ' :
287
- $ value = (bool ) $ value ;
288
- break ;
289
- case \UnitEnum::class:
290
- $ newValue = EnumUtil::tryFromName ($ actionMethodCacheItem ->getTypeClass (), $ value );
291
- if (null !== $ newValue )
292
- {
293
- $ value = $ newValue ;
294
- }
295
- break ;
296
- case \BackedEnum::class:
297
- $ newValue = $ actionMethodCacheItem ->getTypeClass ()::tryFrom ($ value );
298
- if (null !== $ newValue )
299
- {
300
- $ value = $ newValue ;
301
- }
302
- break ;
283
+ switch ($ type ['name ' ])
284
+ {
285
+ case 'int ' :
286
+ $ value = (int ) $ value ;
287
+ break 2 ;
288
+ case 'float ' :
289
+ $ value = (float ) $ value ;
290
+ break 2 ;
291
+ case 'bool ' :
292
+ $ value = (bool ) $ value ;
293
+ break 2 ;
294
+ default :
295
+ switch ($ type ['type ' ])
296
+ {
297
+ case ActionMethodItem::TYPE_UNIT_ENUM :
298
+ $ newValue = EnumUtil::tryFromName ($ type ['name ' ], $ value );
299
+ if (null !== $ newValue )
300
+ {
301
+ $ value = $ newValue ;
302
+ break 3 ;
303
+ }
304
+ break ;
305
+ case ActionMethodItem::TYPE_BACKED_ENUM :
306
+ if ('int ' === $ type ['enumBackingType ' ])
307
+ {
308
+ if (filter_var ($ value , \FILTER_VALIDATE_INT ))
309
+ {
310
+ $ newValue = $ type ['name ' ]::tryFrom ((int ) $ value );
311
+ if (null !== $ newValue )
312
+ {
313
+ $ value = $ newValue ;
314
+ break 3 ;
315
+ }
316
+ }
317
+ }
318
+ else
319
+ {
320
+ $ newValue = $ type ['name ' ]::tryFrom ($ value );
321
+ if (null !== $ newValue )
322
+ {
323
+ $ value = $ newValue ;
324
+ break 3 ;
325
+ }
326
+ }
327
+ break ;
328
+ }
329
+ }
303
330
}
304
331
}
305
332
$ result [] = $ value ;
0 commit comments