forked from cleverage/processuibundle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHttpProcessExecuteValueResolver.php
64 lines (57 loc) · 2.25 KB
/
HttpProcessExecuteValueResolver.php
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
declare(strict_types=1);
/*
* This file is part of the CleverAge/UiProcessBundle package.
*
* Copyright (c) Clever-Age
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace CleverAge\UiProcessBundle\Http\ValueResolver;
use CleverAge\UiProcessBundle\Http\Model\HttpProcessExecution;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Attribute\AsTargetedValueResolver;
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface;
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
use Symfony\Component\Serializer\SerializerInterface;
#[AsTargetedValueResolver('http_process_execution')]
readonly class HttpProcessExecuteValueResolver implements ValueResolverInterface
{
public function __construct(private string $storageDir, private SerializerInterface $serializer)
{
}
/**
* @return iterable<HttpProcessExecution>
*/
public function resolve(Request $request, ArgumentMetadata $argument): iterable
{
$all = $request->request->all();
try {
if ([] === $all) {
$httpProcessExecution = $this->serializer->deserialize(
$request->getContent(),
HttpProcessExecution::class,
'json'
);
} else {
$input = $request->get('input', $request->files->get('input'));
if ($input instanceof UploadedFile) {
$uploadFileName = $this->storageDir.\DIRECTORY_SEPARATOR.date('YmdHis').'_'.uniqid().'_'.$input->getClientOriginalName();
(new Filesystem())->dumpFile($uploadFileName, $input->getContent());
$input = $uploadFileName;
}
$httpProcessExecution = new HttpProcessExecution(
$request->get('code'),
$input,
$request->get('context', [])
);
}
return [$httpProcessExecution];
} catch (\Throwable) {
return [new HttpProcessExecution()];
}
}
}