我有一个Symfony API,它在登录过程中存储了用户的时区。但是,似乎某些时区会导致错误。使用'America/Buenos_Aires'
作为发送示例值,以下代码将引发500错误。
$validator->validate($request->request, new Assert\Collection([
'username' => new AppAssert\Chain([
new Assert\Type('string'),
new Assert\NotBlank(),
]),
'password' => new AppAssert\Chain([
new Assert\Type('string'),
new Assert\NotBlank(),
]),
'timezone' => new AppAssert\Chain([
new Assert\Type('string'),
new Assert\NotIdenticalTo(''),
new Assert\Choice([
'choices' => \DateTimeZone::listIdentifiers(),
'strict' => true,
]),
]),
]));
看这篇帖子https://bugs.php.net/bug.php?id=70816,它指出要使用DateTimeZone::ALL_WITH_BC
,这是我尝试过的
'choices' => \DateTimeZone::listIdentifiers(DateTimeZone::ALL_WITH_BC),
但仍然没有作用。
客户端正在使用Moment JS,它似乎有时返回America/Argentina/Buenos_Aires
,有时返回America/Buenos_Aires
,但是
America/Argentina/Buenos_Aires
工作正常。
答案 0 :(得分:1)
我终于弄清楚了,我在\
上缺少了DateTimeZone::ALL_WITH_BC
完整正确的代码
'timezone' => new AppAssert\Chain([
new Assert\Type('string'),
new Assert\NotIdenticalTo(''),
new Assert\Choice([
'choices' => \DateTimeZone::listIdentifiers(\DateTimeZone::ALL_WITH_BC),
'strict' => true,
]),
]),