首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新5.6.26至5.6.27后的TransformationFailedException

问更新5.6.26至5.6.27后的TransformationFailedException
EN

Stack Overflow用户
提问于 2016-10-21 23:35:01
回答 2查看 528关注 0票数 1

共享主机上的应用程序现在生成一个

...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行

使用以下简化代码:

主计长:

代码语言:javascript
复制
/**
 * @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,
    ]);
}

模板:

代码语言:javascript
复制
{{ 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代码:

代码语言:javascript
复制
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)的结果是

代码语言:javascript
复制
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" 

不知道该怎么处理这些信息。

EN

回答 2

Stack Overflow用户

发布于 2016-10-22 00:26:28

您能试一下page::list标识符()帮助页中的示例1A吗?

代码语言:javascript
复制
<?php
$timezone_identifiers = DateTimeZone::listIdentifiers();
foreach ($timezone_identifiers as $id) {
    echo "$id\n";
}
?>

这将输出所有时区..。如果你的时区在列表里,那就是别的东西。

票数 0
EN

Stack Overflow用户

发布于 2016-10-24 13:24:47

解决方案(但尚未给出答案)将是由共享主机的站长来找出为什么IntlDateFormatter返回null。当主机运行时

代码语言:javascript
复制
<?php
$fmt = new IntlDateFormatter('en', null, null);

echo 'timezone_id of the formatter is : ' . $fmt->getTimezoneId();

反应是

致命错误:调用null上的成员函数getTimezoneId()

当它应该是

格式化程序的timezone_id是:美国/洛杉矶

这位站长已经重新编译了PECL和ICU,但似乎并没有改变任何事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40186790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档