共享主机上的应用程序现在生成一个
...datefmt_create:没有这样的时区:“美国/洛杉矶”
当用户尝试使用日期字段访问窗体时出错。完整的信息是:
未命名的PHP异常Symfony\Component\Form\Exception\TransformationFailedException:“无法转换属性路径的值”contactDate: datefmt_create:没有这样的时区:‘America/洛杉矶’:U_ILLEGAL_ARGUMENT_ERROR“在/www3.projectmana.org/vendor/symfony/symfony/src/Symfony/Component/Form/Form.php第1149行
在几周内,该网站没有发生任何其他变化。
通过phpinfo()的默认时区是America/Los_Angeles
对此有什么合理的解释/解决办法吗?同一服务器上有一个站点沙箱,显示相同的错误。此错误不会发生在我的开发PHP 7系统上。
编辑:
我已经将Symfony 2.8安装替换为(测试) 3.1.5 -类似的行为。现在的错误是:
发生了一个错误!默认的PHP异常Symfony\Component\OptionsResolver\Exception\InvalidOptionsException:"datefmt_create:没有这样的时区:‘America/洛杉矶’: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) }}编辑2:
当我查看应用程序的错误而不是上面简单代码中的错误时,我看到:
发生了一个错误!未命名的PHP异常Symfony\Component\Form\Exception\TransformationFailedException:“无法转换属性路径的值”contactDate: datefmt_create:没有这样的时区:‘America/洛杉矶’: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" 不知道该怎么处理这些信息。
发布于 2016-10-22 00:26:28
您能试一下page::list标识符()帮助页中的示例1A吗?
<?php
$timezone_identifiers = DateTimeZone::listIdentifiers();
foreach ($timezone_identifiers as $id) {
echo "$id\n";
}
?>这将输出所有时区..。如果你的时区在列表里,那就是别的东西。
发布于 2016-10-24 13:24:47
解决方案(但尚未给出答案)将是由共享主机的站长来找出为什么IntlDateFormatter返回null。当主机运行时
<?php
$fmt = new IntlDateFormatter('en', null, null);
echo 'timezone_id of the formatter is : ' . $fmt->getTimezoneId();反应是
致命错误:调用null上的成员函数getTimezoneId()
当它应该是
格式化程序的timezone_id是:美国/洛杉矶
这位站长已经重新编译了PECL和ICU,但似乎并没有改变任何事情。
https://stackoverflow.com/questions/40186790
复制相似问题