【问题标题】:PHP Error Call to a member function format() on arrayPHP错误调用数组上的成员函数格式()
【发布时间】:2017-03-04 12:52:51
【问题描述】:

我有一个日期时间字段

    /**
 * @var \DateTime
 *
 * @ORM\Column(name="date", type="datetime", nullable=true)
 */
private $datetime;  

/**
 * Set date
 *
 * @param \DateTime $datetime
 *
 */
public function setDate($datetime)
{
    $this->datetime = $datetime;

    return $this->datetime ?? new \DateTime();
}

/**
 * Get date
 *
 * @return \DateTime
 */
public function getDate(): \DateTime
{
    return $this->datetime ?? new \DateTime();
}

我下面这个错误:

调用数组上的成员函数 format()

有人知道我为什么会得到这个吗?

编辑:

下面是我用来生成表单以读取 DateTime 值,然后从表单中收集数据并在表中创建新实体的代码:

$trainingform = new Training();

    $form = $this->createFormBuilder($trainingform)
        ->add('Leader', TextType::class)
        ->add('Date', DateTimeType::class, ['label' => 'Date and Time'])
        ->add('topics', TextType::class, ['label' => 'Topics Being Covered'])
        ->getForm();

    if ($form->handleRequest($request)->isValid()) {
        $trainingform->setLeader($request->request->get('form')['Leader']); 
        $trainingform->setDate($request->request->get('form')['Date']);
        $trainingform->setTopics($request->request->get('form')['topics']);
        $em->persist($trainingform);
        $em->flush();
    }

【问题讨论】:

  • 你的价值是多少。你的 $value 是一个数组,而不是一个 obj
  • 该值来自 Symfony DateTime 表单。 ->add('Date', DateTimeType::class, ['label' => 'Date and Time']) 在处理中,$trainingform->setDate($request->request->get('form')['Date']); 相信这就是你的要求
  • 在这里显示它的价值。
  • 日期和时间值示例:2016 Sep 14 , 13 00
  • 这就是表单的样子puu.sh/utRBq/abe82dc5a6.png

标签: php symfony


【解决方案1】:

要正确处理您的数据,您应该使用 symfony 表单的getData-方法,它会将您的请求转换为您之前在表单中指定的状态。在您的情况下,它应该如下所示:

    $trainingForm = new Training();

    $form = $this->createFormBuilder($trainingForm)
        ->add('Leader', TextType::class) // 'Leader' should be named as your property
        ->add('datetime', DateTimeType::class, ['label' => 'Date and Time']) //changed your Date to datetime as your property is
        ->add('topics', TextType::class, ['label' => 'Topics Being Covered'])  //should be named as your property as well
        ->add('submit', SubmitType::class, ['label' => 'Submit form']) //should be there
        ->getForm();

    $form->handleRequest($request)

    if (form->isSubmitted() && form->isValid()) {
        $trainingForm= $form->getData();
        $em->persist($trainingForm);
        $em->flush();
    }

为避免这种不一致,您可以在 setter 方法中指定所需的类型:

/**
 * Set date
 *
 * @param \DateTime $datetime
 */
public function setDate(\DateTime $datetime) //typhint added
{
    $this->datetime = $datetime;
}

`

Setter 不应该返回任何东西。然后你会在你可以控制的步骤上得到你的错误,你就会知道你应该在哪里挖掘。

【讨论】:

  • 感谢工作。另外,我在页面上有一个单独的提交按钮,你知道的。
  • 是的,我知道你可以用 twig 渲染它,但我个人喜欢用表单来保存它。很高兴它有帮助。干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2017-06-24
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多