Clonage d'une entité pour un formulaire
Bonjour à tous !
Alors j'ai un petit problème en PHP (et symfony2). Voilà j'ai un objet en base qui est un Album. Mon album je le récupère de la base et il a des photos (10 photos).
Pour faire mon formulaire avec Symfony2, je passe mon objet à ma vue. J'affiche les photos déjà en base, ensuite je mets des photos dans mon formulaire, et je save.
Le problème arrive à ce moment là. En fait mes entrées dans le formulaire écrase mes anciennes photos. Et j'aimerai faire ça :
Code:
1 2 3 4 5
|
En base Dans le form Résultat
vache.jpg pingoin.jpg pingoin.jpg
NULL tulipe.jpg tulipe.jpg
carotte.jpg NULL carrotte.jpg |
Pour palier ce problème, je fait un deuxième objet Album, en faisant un clone de ma première entité. Mais quand je faire ça : $this->oldAlbum->getPhotosUser() === $album->getPhotosUser() ça me retourne true
Je donne un peu de code :
Mon controller :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
public function photoAction()
{
if(!$this->get('security.context')->isGranted('ROLE_USER'))
{
throw new AccessDeniedHttpException('Accès limité aux personnes inscritent au site');
}
else
{
$entity = new Album();
$oldAlbum = new Album();
$userManager = $this->get('fos_user.user_manager');
$userCurrent = $this->container->get('security.context')->getToken()->getUser();
$user = $userManager->findUserBy(array('username' => $userCurrent));
if($user->getAlbum() != null)
{
$entity = $user->getAlbum();
$oldAlbum = clone $entity;
}
$form = $this->createForm(new AlbumType, $entity);
$formHandler = new PhotoHandler($form,
$this->get('request'),
$userManager,
$user,
$oldAlbum);
if ($formHandler->process())
{
return $this->container->get('templating')
->renderResponse('MonSitePhotoBundle:SwitchBoard:photo.html.'.$this->container
->getParameter('fos_user.template.engine'), array('user' => $user, 'form' => $form->createView()));
}
return $this->container->get('templating')
->renderResponse('MonSitePhotoBundle:SwitchBoard:photo.html.'.$this->container
->getParameter('fos_user.template.engine'), array('user' => $user, 'form' => $form->createView()));
} |
Mon handler :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| protected function onSuccess(Album $album)
{
$photoUsersInDataBase = $this->oldAlbum->getPhotosUser();
$photoUsersInForm = $album->getPhotosUser();
var_dump($photoUsersInDataBase[0]->getImage() != null); // true
var_dump($photoUsersInForm[0]->getImage() != null); // true
var_dump($photoUsersInDataBase[0] === $photoUsersInForm[0]); // true
for ($i = 0; $i < $photoUsersInForm->count(); $i++)
{
if($photoUsersInDataBase[$i]->getImage() != null
&& $photoUsersInForm[$i]->getImage() != null
&& $photoUsersInDataBase[$i] !== $photoUsersInForm[$i])
{
var_dump("Dans la base et dans le form ");
//$photoUsersInForm[$i]->setAlbum($album);
$album->addPhotosUser($photoUsersInForm[$i]);
$photoUsersInForm[$i]->uploadImage();
}
else if($photoUsersInDataBase[$i]->getImage() != null && $photoUsersInForm[$i]->getImage() == null)
{
var_dump("Dans la base ");
$album->addPhotosUser($photoUsersInDataBase[$i]);
//$photoUsersInDataBase[$i]->setAlbum($album);
}
else if($photoUsersInForm[$i]->getImage() != null && $photoUsersInDataBase[$i]->getImage() != null)
{
var_dump("Dans le form ");
$photoUsersInForm[$i]->setAlbum($album);
$album->addPhotosUser($photoUsersInForm[$i]);
$photoUsersInForm[$i]->uploadImage();
}
}
$this->user->setAlbum($album);
$this->em->updateUser($this->user);
} |
Le problème est sur le clone, je pense que ça ne fonctionne pas.
Merci de votre aide !