我有一个 symfony API 端点,如下所示:
/orders/list-all?since=2024-10-21
我想将该查询字符串参数映射到 DateTimeImmutable (或 DateTimeInterface),如下所示:
public function listOrders(
#[OA\QueryParameter(name: 'since', in: 'query', description: 'Date de début de la recherche', required: false, schema: new OA\Schema(type: 'string', format: 'date'))]
#[MapQueryParameter()]
?DateTimeInterface $since = null
): Response
但这似乎不起作用。 我看过:
但我不明白它们应该如何工作,并且文档在这方面的内容非常少。
通过阅读和调试 DateTimeValueResolver 源代码,我发现
$request->attributes->has($argument->getName())
始终为 false。
有没有任何示例用法?
您不能将
MapQueryParameter
与 array
、string
、int
、float
、bool
或 \BackedEnum
以外的类型一起使用。
您可以做的就是接受
since
作为字符串类型,然后创建一个 DateTimeImmutable
。
final class TestController extends AbstractController
{
#[Route(path: '/list', name: 'get-list')]
public function getListAction(
#[MapQueryParameter]
?\DateTimeImmutable $since = null,
)
{
$date = \DateTimeImmutable::createFromFormat('Y-m-d', $since);
dd($date);
}
}