0

感谢 IRC 上的 Stof,我现在知道答案了。我只是想分享它,以防有人偶然发现同样的问题。

问题

当您有字段类型 datetime 时:

/**
 * @ORM\Column(type="datetime", name="released_at")
 */
protected $released_at;

在表单类型中,您使用日期表单类型:

$builder
      ->add('released_at', 'date', array(
          'widget' => 'single_text',
          'format' => 'yyyy-MM-dd',
      ));

你得到这个错误:

致命错误:在第 64 行的 (...)\vendor\symfony\src\Symfony\Component\Form\Extension\Core\Type\DateType.php 中的非对象上调用成员函数 setLenient()

4

3 回答 3

2

解决方案是

试试这个测试

<?php

$formatter = new \IntlDateFormatter();

if($formatter === null)
  echo 'null!';
else
  echo 'else';

如果你得到 null,这意味着你的 php / intl 版本是错误的,你需要升级。

就我而言,我正在运行@ Windows 7 64 位机器,Wampserver2 和 PHP 5.3.8。

升级到 PHP 5.3.10 或更高版本就成功了。

此外,如果您得到:

(..path..)\StubIntlDateFormatter::setLenient() 未实现。请安装“intl”扩展以获得完整的本地化功能。

升级到 Symfony 2.0.16。

再次干杯,TYVM Stof!

于 2012-07-15T12:04:16.887 回答
1

我有两种配置,每一种都有不同的应用程序:-Windows 7 64 位机器,Wampserver2 和 PHP 5.3.8,使用 composer 安装 Symfony 2.0.15 -Windows 7 64 位机器,Wampserver2 和 PHP 5.3.8,安装 Symfony 2.1-RC1与供应商合作

在第一个配置中,我遇到了错误:

Fatal error: Call to a member function format() on a non-object in C:\MyProject\vendor\symfony\src\Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer.php on line 97

在第二个配置中,我遇到了错误:

Fatal error: Call to a member function setLenient() on a non-object in C:\MyProjectSf2.1\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\Type\DateType.php on line 81

我使用以下位置提供的文件在我的 WAMP2 安装中仅将 PHP 从 5.3.8 升级到 5.3.13: http ://www.anindya.com/php-5-4-3-and-php-5-3 -13-x64-64-bit-for-windows/ PHP 5.3.13(线程安全)+ 固定 curl 扩展

它解决了两个应用程序的问题!

非常感谢 Anindya 提供 64 位编译版本的 PHP DLL,我在其他任何地方都没有找到其他 64 位版本!(据我所见(我使用 Beyond Compare 比较了版本),这是我拥有的 Wamp2 版本中包含的他的 5.3.8 64 位线程安全版本;)

最好的问候,克里斯托夫

于 2012-08-09T18:05:51.557 回答
0

如果您的 php.ini 中没有正确的参数,则会发生这种情况...检查您的 php.ini 中的时区是否正确配置为“欧洲/布鲁塞尔”(区分大小写)

于 2014-03-17T14:09:08.193 回答