-
-
Notifications
You must be signed in to change notification settings - Fork 899
Expand file tree
/
Copy pathSymfonyMapUploadedFileDescriber.php
More file actions
45 lines (36 loc) · 1.49 KB
/
SymfonyMapUploadedFileDescriber.php
File metadata and controls
45 lines (36 loc) · 1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
declare(strict_types=1);
/*
* This file is part of the NelmioApiDocBundle package.
*
* (c) Nelmio
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Nelmio\ApiDocBundle\RouteDescriber\RouteArgumentDescriber;
use Nelmio\ApiDocBundle\OpenApiPhp\Util;
use OpenApi\Annotations as OA;
use Symfony\Component\HttpKernel\Attribute\MapUploadedFile;
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
final class SymfonyMapUploadedFileDescriber implements RouteArgumentDescriberInterface
{
public function describe(ArgumentMetadata $argumentMetadata, OA\Operation $operation): void
{
if (!$attribute = $argumentMetadata->getAttributes(MapUploadedFile::class, ArgumentMetadata::IS_INSTANCEOF)[0] ?? null) {
return;
}
$name = $attribute->name ?? $argumentMetadata->getName();
$body = Util::getChild($operation, OA\RequestBody::class);
$mediaType = Util::getCollectionItem($body, OA\MediaType::class, [
'mediaType' => 'multipart/form-data',
]);
/** @var OA\Schema $schema */
$schema = Util::getChild($mediaType, OA\Schema::class, [
'type' => 'object',
]);
$property = Util::getCollectionItem($schema, OA\Property::class, ['property' => $name]);
Util::modifyAnnotationValue($property, 'type', 'string');
Util::modifyAnnotationValue($property, 'format', 'binary');
}
}