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';
}
}