Problème de date Php - Symfony

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Vétéran
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

Problème de date Php - Symfony

par Rockleader » 18 Fév 2017, 19:42

Salut,

j'ai un "petit" soucis qui commence à me taper sur le système^^

J'espère qu vous pourrez m'aider !


L'idée étant que j'ai un formulaire qui récupère deux valeurs startDate et duree.
Dans mon contrôleur, je récupère donc startDate, et en utilisant la durée je construits une endDate.


Cela correspond au bout de code suivant:


Code: Tout sélectionner
$duree=$form->get("time")->getData();
      $dateDeb=$reservation->getStartTime();
      $dateFin=$dateDeb;
      //calcul de la date de fin avec la durée
      $newDate="+".$duree." minutes";
      $dateFin=$dateFin->modify($newDate);

      $reservation->setEndTime($dateFin);



Le problème étant qu'en fait en faisant les choses ainsi, dateFin se retrouve être en réalité non pas une simple copie modifié de dateDeb, mais bel et bien le même objet !

Du coup , lorsque je modifie dateFin, je modifie par la même occasion dateDeb et ça je ne veux pas !

Je cherche donc un moyen de récupérer le contenu de ma date deb sans récupérer pour autant l'objet (et donc en construisant un nouvel objet mais à partir de l'ancien).

En espérant que je sois suffisamment clair^^

Et voici en plus le code du formulaire, même si je ne pense pas qu'il soit directement lié au problème


Code: Tout sélectionner
<?php

namespace TCS\ClubTennisBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;

class ReservationType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('startTime',DateTimeType::class,
            array('model_timezone'=>'Europe/Paris' , 'placeholder' => array(
                        'year' => 'Année', 'month' => 'Mois', 'day' => 'Jour',
                        'hour' => 'Heure', 'minute' => 'Minute')
            ,'label'  => 'Date et heure du début de la réservation'))
        ->add('time' ,ChoiceType::class,array( 'choices'  => array(
                    '30 minutes' => 30,
                    '1 heure' => 60,
                    '1 heure 30 minutes' => 90,
                    '2 heures' => 120,
            ),'mapped' => false,'label'  => 'Durée de la réservation'))
        ->add('partner',TextareaType::class,array('label'  => 'Partenaire'))
        ->add('type',ChoiceType::class,array( 'choices'  => array(
                    'Tournois' => 'tournois',
                    'Particulier' => 'particulier',
                    'Leçon' => 'leçon',
            ),'label'  => 'Type réservation'))
        ->add('repeat',CheckboxType::class,array('label'  => 'Répéter la réservation','required' => false))
        ->add('field',EntityType::class, array(
                // query choices from this entity
                'class' => 'TCS\ClubTennisBundle\Entity\Field',

                // use the Field.id property as the visible option string
                'choice_label' => 'id','label'  => 'Terrain'))
        ->add('Reserver',      SubmitType::class);       
    }
   
    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'TCS\ClubTennisBundle\Entity\Reservation'
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'tcs_clubtennisbundle_reservation';
    }


}

Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !



J3r3mY
Messages: 5
Enregistré le: 31 Juil 2017, 16:53

Re: Problème de date Php - Symfony

par J3r3mY » 31 Juil 2017, 17:06

Bonjour Rockleader,

Ton problème se situe ici : $dateFin=$dateDeb;
En PHP, lorsqu'une instance d'objet est assigné à une variable dans un même scope, la dite variable est un "lien symbolique" à l'instance de l'objet.
Afin que les manipulation de $dateFin n'ai aucune incidence sur $dateDeb tu as plusieurs façon de le faire mais la plus courte reste l'utilisation du mot clef "clone" tel que : $dateFin = clone $dateDeb.

Tu obtiendras suffisament d'information ici

A la suite de celà $dateFin et $dateDeb auront les mêmes attributs et méthodes mais pas la même instance, modifier l'un ne modifiera pas l'autre.

En espérant t'apporter satisfaction, je te souhaite une bonne et agréable journée.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite