【问题标题】:Error: Call to a member function format() on a non-object with \DateTime错误:在具有 \DateTime 的非对象上调用成员函数 format()
【发布时间】:2015-02-10 09:05:08
【问题描述】:

我的 Symfony 项目有一个问题。我有一个有很多 \DateTime 这样的实体:

/**
* @var \DateTime
*
* @ORM\Column(name="date_debut", type="datetime", length=255)
*/
protected $dteDebut ;

function getDteDebut() {return $this->dteDebut;}

function setDteDebut(\DateTime $dteDebut) {$this->dteDebut = $dteDebut;}

我像这样使用带有日期时间的 formBuilder:

$builder->add('dteDebut', 'datetime', array(
            'label' => 'Date de début :',
            'date_widget' => 'single_text',
            'time_widget' =>'single_text'
        ));

还有一个使用我的表单的简单功能:

公共函数 OrganizerAction() {

    $em=$this->getDoctrine()->getManager();
    $orga = new \CCF\CCFBundle\Entity\Organiser;
    $form = $this->createForm(new \CCF\CCFBundle\Form\OrganiserForm(), $orga);
    $request = $this->get('request');

    if ($request->getMethod() == 'POST') {
        $form->bind($request);
        var_dump($form->get('dteDebut')->getData());
        if ($form->isValid()) {                
            $em->persist($orga);
            $em->flush();
            return $this->redirect($this->generateUrl('organiser_homepage'));
        }
    }
    //on passe la méthode createView() à la vue pour qu'elle l'affiche
    return $this->render('CCFBundle:Organiser:create.html.twig',array("form"=>$form->createView(),));
}

当我验证表单时,我有一个错误

错误:在非对象上调用成员函数 format()

堆栈跟踪

在 vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/DateType.php 第 53 行 -

public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
    return ($value !== null)
        ? $value->format($platform->getDateFormatString()) : null;
}
/**

我不明白这个错误在哪里,你能帮帮我吗?

【问题讨论】:

  • 奇怪的问题,bwt 在日期时间类型的 orm 列定义中我从不指定长度...
  • 你能告诉你什么 var_dump($form->get('dteDebut')->getData()) 给你吗?
  • var_dump return : object(DateTime)[468] public 'date' => string '2015-02-19 01:00:00' (length=19) public 'timezone_type' => int 3公共“时区”=> 字符串“UTC”(长度=3)
  • 如果您在持久化之前转储$orgadteDebut 字段是否由您在表单中选择的字段填充?
  • 是的 $orga 从表单中获取 dteDebut:object(CCF\CCFBundle\Entity\Organiser)[394] private 'id' => null protected 'dteDebut' => object(DateTime)[609 ] public 'date' => string '2015-02-10 18:59:00' (length=19) public 'timezone_type' => int 3 public 'timezone' => string 'UTC' (length=3) .. .

标签: php symfony datetime doctrine-orm formbuilder


【解决方案1】:

试试这个:

/**
* @var \DateTime
*
* @ORM\Column(name="date_debut", type="datetime", length=255)
*/
protected $dteDebut ;

function getDteDebut() {return $this->dteDebut;}

function setDteDebut(new \DateTime $dteDebut) {$this->dteDebut = $dteDebut;}

【讨论】:

  • 根据你的建议,我有一个“解析错误:语法错误,意外的‘新’(T_NEW),期待‘&’或变量 (T_VARIABLE)”错误。
【解决方案2】:

我也在我的一个实体中使用日期时间。我看到的一个变化是我没有在设置器中指定变量是日期时间对象

setDteDebut($dteDebut) {...}

【讨论】:

  • 我也做了测试,但没有在 setter 中指定类型,但它没有任何改变。
【解决方案3】:

好吧,我的错...我在另一个属性上出错了...我有一个日期类型为日期的属性,并且该属性在表单中有一个类型字符串...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多