-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAbsoluteDateValueResolver.php
More file actions
47 lines (40 loc) · 1.42 KB
/
AbsoluteDateValueResolver.php
File metadata and controls
47 lines (40 loc) · 1.42 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
46
47
<?php
declare(strict_types=1);
namespace AssoConnect\PHPDateBundle\ThirdParty\Symfony\HttpKernel\Controller\ArgumentResolver;
use AssoConnect\PHPDate\AbsoluteDate;
use AssoConnect\PHPDate\Exception\ParsingException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface;
use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
class AbsoluteDateValueResolver implements ValueResolverInterface
{
/**
* @return array<AbsoluteDate>
*/
public function resolve(Request $request, ArgumentMetadata $argument): iterable
{
$argumentType = $argument->getType();
if (AbsoluteDate::class !== $argumentType) {
return [];
}
// get the value from the request, based on the argument name
$value = $request->attributes->get($argument->getName());
if (!is_string($value)) {
return [];
}
try {
$date = new AbsoluteDate($value);
} catch (ParsingException $e) {
throw new BadRequestHttpException(
sprintf(
'Invalid date given for parameter "%s" (expected format: %s).',
$value,
AbsoluteDate::DEFAULT_DATE_FORMAT
),
$e
);
}
return [$date];
}
}