У меня странная ошибка в контроллере с Symfony4 - PullRequest
0 голосов
/ 25 марта 2019

Это мой контроллер

    $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 got 2019-03-25 17: 00: 00

Я хочу решить эту проблему, потому что $ entretien-> getDebutRdv () также меняется на 2019-03-25 17: 00: 00 Как я сделал $ entretien-> setDebutRdv ($ duree)

1 Ответ

2 голосов
/ 25 марта 2019

Это поведение по умолчанию \DateTime экземпляров: add метод изменяет объект, из которого вызывается. Если вы не хотите, чтобы $debutRdv был изменен, вы можете клонировать в $finRdv и применить add:

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