Symfony / PHP DateTimeZone缺少时区

时间:2018-10-25 10:39:03

标签: php symfony

我有一个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工作正常。

1 个答案:

答案 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,
            ]),
        ]),