共享主机上的应用程序现在产生
用户尝试访问带有日期字段的表单时出现... datefmt_create:没有这样的时区:' America / Los_Angeles'
错误。完整的信息是:
未捕获的PHP异常 Symfony的\分量\表格\异常\ TransformationFailedException: "无法转换属性路径的值" contactDate": datefmt_create:没有这样的时区:' America / Los_Angeles': U_ILLEGAL_ARGUMENT_ERROR"在 /www3.projectmana.org/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php 第1149行
几周内网站没有其他变化。
phpinfo()
的默认时区为America/Los_Angeles
对此有任何合理的解释/解决方法吗?在同一台服务器上有一个站点的沙箱,它会演示相同的错误。我的开发PHP 7系统上没有出现错误。
我用(测试的)3.1.5取代了Symfony 2.8安装 - 类似的行为。现在错误:
发生错误!未捕获的PHP异常 Symfony的\分量\ OptionsResolver \异常\ InvalidOptionsException: " datefmt_create:没有这样的时区:' America / Los_Angeles': U_ILLEGAL_ARGUMENT_ERROR"在 /www3.projectmana.org/vendor/symfony/symfony/src/Symfony/Component/Form/Extension/Core/Type/DateType.php 第88行
使用以下简化代码:
控制器:
/**
* @Route("/datecheck")
*/
public function dateCheckAction()
{
$form = $this->createFormBuilder($task)
->add('dueDate', DateType::class)
->add('save', SubmitType::class, array('label' => 'Create Task'))
->getForm();
return $this->render('Default/datecheck.html.twig', [
'form' => $form,
]);
}
模板:
{{ form(form) }}
当我查看应用程序的错误而不是上面的简单代码时,我看到:
发生错误!未捕获的PHP异常 Symfony的\分量\表格\异常\ TransformationFailedException: "无法转换属性路径的值" contactDate": datefmt_create:没有这样的时区:' America / Los_Angeles': U_ILLEGAL_ARGUMENT_ERROR"在 /www3.projectmana.org/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php 第1095行
围绕该行的Form.php代码:
try {
foreach ($this->config->getViewTransformers() as $transformer) {
$value = $transformer->transform($value);
}
} catch (TransformationFailedException $exception) {
throw new TransformationFailedException(
'Unable to transform value for property path "'.$this->getPropertyPath().'": '.$exception->getMessage(),
$exception->getCode(),
$exception
);
}
var_dump($transformer)
的结果包含在“例外”中
object(Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer)#1128 (6) { ["dateFormat":"Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer":private]=> int(2) ["timeFormat":"Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer":private]=> int(-1) ["pattern":"Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer":private]=> string(5) "M/d/y" ["calendar":"Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer":private]=> int(1) ["inputTimezone":protected]=> string(19) "America/Los_Angeles"
不确定如何处理此信息。
答案 0 :(得分:0)
您可以尝试PHP DateTimeZone::listIdentifiers() help page中的示例1A吗?
<?php
$timezone_identifiers = DateTimeZone::listIdentifiers();
foreach ($timezone_identifiers as $id) {
echo "$id\n";
}
?>
这将输出所有时区......如果你的时区在列表中,那么它就是其他的。
答案 1 :(得分:0)
解决方案但尚未回答共享主机的网站管理员要弄清楚为什么IntlDateFormatter返回null。当主机运行时
<?php
$fmt = new IntlDateFormatter('en', null, null);
echo 'timezone_id of the formatter is : ' . $fmt->getTimezoneId();
回复是
致命错误:在null
上调用成员函数getTimezoneId()
什么时候应该
格式化程序的timezone_id是:America / Los_Angeles
网站管理员已经重新编译了PECL-intl和ICU,但它似乎没有改变任何东西。