PHP更新5.6.26至5.6.27后的TransformationFailedException
共享主机上的应用程序现在生成 …datefmt_create:没有这样的时区:“美国/洛杉矶” 用户试图访问带有日期字段的表单时出错。完整的信息是: 未捕获的PHP异常 Symfony\Component\Form\Exception\TransformationFailedException: 无法转换属性路径“contactDate”的值: datefmt_create:没有这样的时区:“美国/洛杉矶”: U_非法_参数_错误”在 /ww3.projectmana.org/vendor/symfony/symfony/src/symfony/Component/Form/Form.php 第1149行 几周来,该网站没有其他变化 通过PHP更新5.6.26至5.6.27后的TransformationFailedException,php,symfony,Php,Symfony,共享主机上的应用程序现在生成 …datefmt_create:没有这样的时区:“美国/洛杉矶” 用户试图访问带有日期字段的表单时出错。完整的信息是: 未捕获的PHP异常 Symfony\Component\Form\Exception\TransformationFailedException: 无法转换属性路径“contactDate”的值: datefmt_create:没有这样的时区:“美国/洛杉矶”: U_非法_参数_错误”在 /ww3.projectmana.org/vendor/sy
phpinfo()
的默认时区是America/Los_Angeles
对此有任何合理的解释/修正吗?同一服务器上的站点有一个沙箱显示了相同的错误。该错误不会发生在我的开发PHP7系统上
编辑:
我已将Symfony 2.8安装替换为(已测试)3.1.5-类似的行为。现在出现错误:
发生了一个错误!未捕获的PHP异常
Symfony\Component\OptionsResolver\Exception\InvalidOptionsException:
“datefmt_create:没有这样的时区:'美国/洛杉矶':
U_非法_参数_错误”在
/ww3.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) }}
编辑#2:
当我看到应用程序的错误而不是上面简单代码中的错误时,我看到:
发生了一个错误!未捕获的PHP异常
Symfony\Component\Form\Exception\TransformationFailedException:
无法转换属性路径“contactDate”的值:
datefmt_create:没有这样的时区:“美国/洛杉矶”:
U_非法_参数_错误”在
/ww3.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\u转储($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"
不确定该如何处理此信息。您可以从中尝试示例1A吗
这将输出所有时区。。。如果你的时区在列表中,那么它是另外一个地方。你能试一下列表中的示例1A吗
这将输出所有时区。。。如果您的时区在列表中,那么它是另外一个问题。解决方案是让共享主机的网站管理员找出IntlDateFormatter返回null的原因,但目前还没有答案。当主机运行时
<?php
$fmt = new IntlDateFormatter('en', null, null);
echo 'timezone_id of the formatter is : ' . $fmt->getTimezoneId();
解决方案是让共享主机的网站管理员找出IntlDateFormatter返回null的原因,但目前还没有答案。当主机运行时
<?php
$fmt = new IntlDateFormatter('en', null, null);
echo 'timezone_id of the formatter is : ' . $fmt->getTimezoneId();
这听起来不像是PHP的问题;听起来更像是你的时区(zoneinfo)文件不知何故被破坏了?@jhaagsma我会把这个传给主机;我无法控制服务器。谢谢。@jhaagsma主机报告zoneinfo文件很好,带有日期函数的php脚本执行正常。这听起来不像是php问题;听起来更像是你的时区(zoneinfo)文件不知何故被破坏了?@jhaagsma我会把这个传给主机;我无法控制服务器。谢谢。@jhaagsma主机报告zoneinfo文件很好,带有日期函数的php脚本执行正常。完成<代码>美国/洛杉矶
出现在output.Hmm中。那就不是了。我并不完全熟悉Symfony,但我会看一看相关的线路,看看它试图做什么…完成<代码>美国/洛杉矶
出现在output.Hmm中。那就不是了。我对Symfony不太熟悉,但我会看一看相关的线路,看看它想做什么。。。