Symfony2日期表单类型:致命错误:在非对象上调用成员函数setLenient()

时间:2012-07-15 12:04:17

标签: php windows forms symfony intl

感谢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()

2 个答案:

答案 0 :(得分: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!

答案 1 :(得分:1)

我有两个配置,每个配置都有不同的应用程序: - 使用composer安装的Windows 7 64位计算机,带有PHP 5.3.8的Wampserver2和Symfony 2.0.15 - Windows 7 64位机器,带有PHP 5.3.8的Wampserver2,带有供应商的zip安装的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(线程安全)+固定卷曲扩展

它修复了两个应用程序的问题!

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

祝你好运, 克里斯托夫