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 :
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Je donne un peu de code :
Mon controller :
Mon handler :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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())); }
Le problème est sur le clone, je pense que ça ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
Merci de votre aide !
Partager