我在Symfony4控制器中有一个奇怪的错误

时间:2019-03-25 16:26:38

标签: php symfony controller symfony4

这是我的控制人

    $entretien = new Entretien();
    $form3 = $this->createForm(EntretienType::class, $entretien); // entretien type has a attribute debutRdv
    $form3->add('duree', TimeType::class, [
        'placeholder' => [
            'hour' => 'Heure', 'minute' => 'Minute', 'second' => 'Seconde',
        ],
        'with_seconds' => true,
        "mapped" => false,
    ]);

$form3->handleRequest($request);

    if($form3->isSubmitted())
                {
                    $debutRdv= $entretien->getDebutRdv(); // getdata from form

                    $duree =$form3->get("duree")->getData();

                    $duree = $duree->format('\P\TH\Hi\Ms\S');
/*------------Here the probleme--------*/
                        $finRdv = $debutRdv->add(new \DateInterval($duree));
/*-------------------------------------*/
...

问题是当我编写$ debutRdv-> add(...)时,属性$ debutRdv变为$ finRdv,就像我完成了$ debutRdv = $ finRdv;

例如 $ debutRdv:“ 2019-03-25 16:30:00” $ duree:“ 0:30:00”

当我写这篇文章

$finRdv = $debutRdv->add(new \DateInterval($duree));

$ duree $ debutRdv 更改为 2019-03-25 17:00:00 但我只希望 $ duree 获得 2019-03-25 17:00:00

我想解决这个问题,因为 $ entretien-> getDebutRdv()也更改为 2019-03-25 17:00:00 就像我完成$ entretien-> setDebutRdv($ duree)

1 个答案:

答案 0 :(得分:2)

这是\DateTime实例的默认行为:add方法更改了调用它的对象。如果您不想更改$debutRdv,则可以将其克隆$finRdv并应用add

$finRdv = clone $debutRdv;
// see, here's no `=` as `add()` will directly change `$finRdv`
$finRdv->add(new \DateInterval($duree));