Bonsoir,

J'ai une entité upload qui est comme ça :

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
*
namespace App\UploadBundle\Entity;
*
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\File\UploadedFile;
*
/**
** Upload
**
** @ORM\Table()
** @ORM\Entity(repositoryClass="App\UploadBundle\Entity\UploadRepository")
** @ORM\HasLifecycleCallbacks
**/
class Upload
{
****/**
****** @var integer
******
****** @ORM\Column(name="id", type="integer")
****** @ORM\Id
****** @ORM\GeneratedValue(strategy="AUTO")
******/
****private $id;
*
****/**
****** @var string
******
****** @ORM\Column(name="url", type="string", length=255)
******/
****private $url;
*
*
****/**
****** Get id
******
****** @return integer
******/
****public function getId()
****{
********return $this->id;
****}
*
****/**
****** Set url
******
****** @param string $url
****** @return Upload
******/
****public function setUrl($url)
****{
********$this->url = $url;
*
********return $this;
****}
*
****/**
****** Get url
******
****** @return string
******/
****public function getUrl()
****{
********return $this->url;
****}
*
*
*
****public $file;
****public $tempFilename;
*
****public function setFile(UploadedFile $file){
********$this->file = $file;
*
********if(null !== $this->url){
************$this->tempFilename = $this->url;
************$upload_name = \uniqid();*******
************$this->url = null;
********}
****}
****/**
***** @ORM\PrePersist()
***** @ORM\PreUpdate()
*****/
****public function preUpload(){
********if(null === $this->file){
************return;
********}
********$upload_name = \uniqid();*******
*
********$this->url = $upload_name.'.'.$this->file->guessExtension();
****}
*
****public function upload(){
********if(null === $this->file){
************return;
********}
********if(null !== $this->tempFilename){
************$oldFile = $this->getUploadRootDir().'/'.$upload_name.'.'.$this->tempFilename;
************if(file_exists($oldFile)){
****************unlink($oldFile);
************}
********}
********$this->file->move(
************$this->getUploadRootDir(),
************$this->url);
****}
*
****/**
***** @ORM\PreRemove()
*****/
****public function preRemoveUpload(){
********$this->tempFilename = $this->getUploadRootDir().'/'.$upload_name.'.'.$this->url;
****}
****/**
***** @ORM\PostRemove()
*****/
****public function removeUpload(){
********if(file_exists($this->tempFilename)){
************unlink($this->tempFilename);
********}
****}
*
****public function getUploadDir(){
********return 'uploads/';
****}
****protected function getUploadRootDir(){
********return __DIR__.'/../../../../web/'.$this->getUploadDir();
****}
*
****public function getWebPath(){
********return $this->getUploadDir().'/'.$this->getId().'.'.$this->getUrl();
****}
}
J'ai une deuxieme entité caroussel qui à une relation onetoone avec et qui marche très bien lorsque je passe par localhost://caroussel.

Parcontre, et c'est la que ça se complique, j'ai une entité box1 qui à une relation onetoone avec, et qui marche aussi très bien lorsque je passe directement par localhost://box1 sauf que j'ai une troisième entité main.php qui à lui une relation onetoone avec l'entité box1.php et lorsque je passe par localhost://main tout se passe bien, l'url est bien généré et persisté en BD mais l'upload ne se fait pas.

Voici la fonction create de box1 :
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
/**
****** Creates a new Box1 entity.
******
****** @Route("/", name="admin_box1_create")
****** @Method("POST")
****** @Template("AppSubsectionBundle:Box1:new.html.twig")
******/
****public function createAction(Request $request)
****{
********$entity = new Box1();
********$form = $this->createCreateForm($entity);
********$form->handleRequest($request);
*
********if ($form->isValid()) {
************$em = $this->getDoctrine()->getManager();
************$em->persist($entity);
************$entity->getUpload()->upload();
************$em->flush();
*
************return $this->redirect($this->generateUrl('admin_box1_show', array('id' => $entity->getId())));
********}
*
********return array(
************'entity' => $entity,
************'form'** => $form->createView(),
********);
****}
et la relation dans l'entité main.php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
/**
* @ORM\OneToOne(targetEntity="App\SubsectionBundle\Entity\Box1", cascade={"persist"})
* @ORM\JoinColumn(nullable=true)
*/
private $frontbox1;
Merci de votre aide