У меня есть 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