У меня есть 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
работает нормально.
Moment JS, похоже, возвращает и то, и другое. Иногда America/Argentina/Buenos_Aires
и America/Buenos_Aires
, последний ошибается.
Я наконец понял, мне не хватало \
на 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,
]),
]),
Вроде
America/Argentina/Buenos_Aires