Je crois que le mieux c'est que tu nous donnes ton controlleur et ton entité complète parce qu'on va pas s'en sortir sinon
Je crois que le mieux c'est que tu nous donnes ton controlleur et ton entité complète parce qu'on va pas s'en sortir sinon
Ok résumé je veux passer le paramètre $idPoi dans le champ idPoi du formulaire pour que je ne sélectionne + un POI, la fonction newAction permet d'appeller le formulaire !
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217 <?php namespace App\SuisseBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use App\SuisseBundle\Entity\SuissePoiMedia; use App\SuisseBundle\Form\SuissePoiMediaType; use App\SuisseBundle\Entity\SuissePoi; /** * SuissePoiMedia controller. * */ class SuissePoiMediaController extends Controller { /** * Lists all SuissePoiMedia entities. * */ public function indexAction() { $em = $this->getDoctrine()->getEntityManager(); $entities = $em->getRepository('AppSuisseBundle:SuissePoiMedia')->findAll(); return $this->render('AppSuisseBundle:SuissePoiMedia:index.html.twig', array( 'entities' => $entities )); } /** * Finds and displays a SuissePoiMedia entity. * */ public function showAction($id) { $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('AppSuisseBundle:SuissePoiMedia')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find SuissePoiMedia entity.'); } $deleteForm = $this->createDeleteForm($id); return $this->render('AppSuisseBundle:SuissePoiMedia:show.html.twig', array( 'entity' => $entity, 'delete_form' => $deleteForm->createView(), )); } /** * Displays a form to create a new SuissePoiMedia entity. * */ public function newAction($idPoi) { $em = $this->getDoctrine()->getEntityManager(); $media = $em->getRepository('AppSuisseBundle:SuissePoiMedia')->findById($idPoi); $entity = new SuissePoiMedia(); echo $idPoi; $form = $this->createForm(new SuissePoiMediaType($idPoi), $entity); $idPoi = $form->get('idPoi'); //$form->get('idPoi')->getData(); //$form->getData(array('idPoi' => $idPoi)); return $this->render('AppSuisseBundle:SuissePoiMedia:new.html.twig', array( 'entity' => $entity, 'form' => $form->createView(), )); } /** * Creates a new SuissePoiMedia entity. * */ public function createAction() { $entity = new SuissePoiMedia(); $request = $this->getRequest(); $form = $this->createForm(new SuissePoiMediaType(), $entity); $form->bindRequest($request); if ($this->getRequest()->getMethod() === 'POST') { $form->bindRequest($this->getRequest()); if ($form->isValid()) { $em = $this->getDoctrine()->getEntityManager(); $entity->uploadFile(); $em->persist($entity); $em->flush(); return $this->redirect($this->generateUrl('suissepoimedia_show', array('id' => $entity->getId()))); } } return $this->render('AppSuisseBundle:SuissePoiMedia:new.html.twig', array( 'entity' => $entity, 'form' => $form->createView() )); } /** * Displays a form to edit an existing SuissePoiMedia entity. * */ public function editAction($id) { $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('AppSuisseBundle:SuissePoiMedia')->find($id); //$poi = $em->getRepository('AppSuisseBundle:SuissePoi')->findById($id); if (!$entity) { throw $this->createNotFoundException('Unable to find SuissePoiMedia entity.'); } $editForm = $this->createForm(new SuissePoiMediaType(), $entity); $deleteForm = $this->createDeleteForm($id); return $this->render('AppSuisseBundle:SuissePoiMedia:edit.html.twig', array( 'entity' => $entity, // 'poi' => $poi, 'edit_form' => $editForm->createView(), 'delete_form' => $deleteForm->createView(), )); } /** * Edits an existing SuissePoiMedia entity. * */ public function updateAction($id) { $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('AppSuisseBundle:SuissePoiMedia')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find SuissePoiMedia entity.'); } $editForm = $this->createForm(new SuissePoiMediaType(), $entity); $deleteForm = $this->createDeleteForm($id); $request = $this->getRequest(); $editForm->bindRequest($request); if ($editForm->isValid()) { $entity->uploadFile(); $entity->removeFile(); $em->persist($entity); $em->flush(); return $this->redirect($this->generateUrl('suissepoimedia_edit', array('id' => $id))); } return $this->render('AppSuisseBundle:SuissePoiMedia:edit.html.twig', array( 'entity' => $entity, 'edit_form' => $editForm->createView(), 'delete_form' => $deleteForm->createView(), )); } /** * Deletes a SuissePoiMedia entity. * */ public function deleteAction($id) { $form = $this->createDeleteForm($id); $request = $this->getRequest(); $form->bindRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('AppSuisseBundle:SuissePoiMedia')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find SuissePoiMedia entity.'); } $entity->removeFile(); $em->remove($entity); $em->flush(); } return $this->redirect($this->generateUrl('suissepoimedia')); } private function createDeleteForm($id) { return $this->createFormBuilder(array('id' => $id)) ->add('id', 'hidden') ->getForm() ; } }Formulaire :
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275 <?php namespace App\SuisseBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; umask(0000); /** * App\SuisseBundle\Entity\SuissePoiMedia * @ORM\HasLifecycleCallbacks * @ORM\Table(name="suisse_poi_media") * @ORM\Entity */ class SuissePoiMedia { /** * @var integer $id * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="SEQUENCE") * @ORM\SequenceGenerator(sequenceName="suisse_poi_media_id_seq", allocationSize="1", initialValue="1") */ private $id; /** * @var text $title * * @ORM\Column(name="title", type="text", nullable=true) */ private $title; /** * @var text $type * * @ORM\Column(name="type", type="text", nullable=true) */ private $type; /** * @var text $file * @Assert\File(maxSize="10000000") * @ORM\Column(name="file", type="text", nullable=true) */ private $file; /** * @var text $comment * @ORM\Column(name="comment", type="text", nullable=true) */ private $comment; /** * @var integer $partie * * @ORM\Column(name="partie", type="integer", nullable=true) */ private $partie; /** * @var SuissePoi * * @ORM\ManyToOne(targetEntity="SuissePoi") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="id_poi", referencedColumnName="id") * }) */ private $idPoi; /** * @var SuisseLang * * @ORM\ManyToOne(targetEntity="SuisseLang") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="id_lang", referencedColumnName="id") * }) */ private $idLang; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set title * * @param text $title */ public function setTitle($title) { $this->title = $title; } /** * Get title * * @return text */ public function getTitle() { return $this->title; } /** * Set type * * @param text $type */ public function setType($type) { $this->type = $type; } /** * Get type * * @return text */ public function getType() { return $this->type; } /** * Set file * * @param text $file */ public function setFile($file) { $this->file = $file; } /** * Get file * * @return text */ public function getFile() { return $this->file; } /** * Set comment * * @param text $comment */ public function setComment($comment) { $this->comment = $comment; } /** * Get comment * * @return text */ public function getComment() { return $this->comment; } /** * Set partie * * @param integer $partie */ public function setPartie($partie) { $this->partie = $partie; } /** * Get partie * * @return integer */ public function getPartie() { return $this->partie; } /** * Set idPoi * * @param App\SuisseBundle\Entity\SuissePoi $idPoi */ public function setIdPoi(\App\SuisseBundle\Entity\SuissePoi $idPoi) { $this->idPoi = $idPoi; } /** * Get idPoi * * @return App\SuisseBundle\Entity\SuissePoi */ public function getIdPoi() { return $this->idPoi; } /** * Set idLang * * @param App\SuisseBundle\Entity\SuisseLang $idLang */ public function setIdLang(\App\SuisseBundle\Entity\SuisseLang $idLang) { $this->idLang = $idLang; } /** * Get idLang * * @return App\SuisseBundle\Entity\SuisseLang */ public function getIdLang() { return $this->idLang; } //upload le fichier public function getWebPath() { return null === $this->file ? null : $this->getUploadDir().'/'.$this->file; } protected function getUploadRootDir() { // le chemin absolu du repertoire dans lequel sauvegarder les photos de profil return __DIR__.'/../../../../web/'.$this->getUploadDir(); } protected function getUploadDir() { // get rid of the __DIR__ so it doesn't screw when displaying uploaded doc/image in the view. return '$this->Test'; } public function uploadFile() { // Nous utilisons le nom de fichier original, donc il est dans la pratique // nessaire de le nettoyer pour eviter les problemes de securite // move copie le fichier present chez le client dans le repertoire indique $this->file->move($this->getUploadRootDir(), $this->file->getClientOriginalName()); // On sauvegarde le nom de fichier $this->file = $this->file->getClientOriginalName(); // La propriete file ne servira plus //$this->file = null; } public function removeFile() { if ($file = $this->getWebPath()) { unlink($file); } } }
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 <?php namespace App\SuisseBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; class SuissePoiMediaType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder ->add('title', 'text',array('label'=>'Titre :',)) ->add('type', 'choice', array( 'choices' => array ('Image' => 'Image', 'Texte' => 'Texte', 'Video' => 'Video'), 'label'=>'Type :')) ->add('file', 'file',array('label'=>'Image/Video :',)) ->add('comment', 'text',array('label'=>'Commentaire :',)) ->add('partie') ->add('idPoi', 'hidden', array( 'data' => $idPoi, 'property_path' => null)) ->add('idLang', 'entity', array( 'class' => 'AppSuisseBundle:SuisseLang', 'property' => 'title', 'label' => 'Langue :')) ; } public function getName() { return 'app_suissebundle_suissepoimediatype'; } public function getDefaultOptions(array $options) { return array( 'validation_groups' => array('registration'), 'data_class' => 'App\SuisseBundle\Entity\SuissePoiMedia', ); } }
Ok essaye çà :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $em = $this->getDoctrine()->getEntityManager(); $media = $em->getRepository('AppSuisseBundle:SuissePoiMedia')->find($idPoi); $entity = new SuissePoiMedia(); $entity->setIdPoi($media); $form = $this->createForm(new SuissePoiMediaType(), $entity);
Merci mais y a une Erreur :
je crois que ca vient de la comme ce champ a une clé étrangère :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Catchable Fatal Error: Argument 1 passed to App\SuisseBundle\Entity\SuissePoiMedia::setIdPoi() must be an instance of App\SuisseBundle\Entity\SuissePoi, null given, called in ... Symfony/src/App/SuisseBundle/Controller/SuissePoiMediaController.php on line 78 and defined in ... Symfony/src/App/SuisseBundle/Entity/SuissePoiMedia.php line 198
en fait la table SuissePoi a une clé primaire c'est id avant je sélectionne le POI apartir une liste déroulante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public function setIdPoi(\App\SuisseBundle\Entity\SuissePoi $idPoi) { $this->idPoi = $idPoi; }
Bah peu être que ton argument $idPoi est mauvais et ne correspond a aucune entité.
Enfin pour ça on va pas trop pouvoir t'aider va falloir que tu regardes un peu du côté de ton code.
Du coté du formulaire comment je peux faire pour cacher le champ "idPoi" qui va prendre la valeur du paramètre $idPoi
bah non ! si on supprime un champ 'xxxx' d'un form Symfony met une erreur :
Le champ 'xxxx' n’existe pas En effet car il est définie dans entité !
Pas du tout,
t'as cette erreur si t'essai d'afficher un champs dans ton template alors qu'il est pas défini dans ton FormType.
Parce ce qu'avec ce que tu dis, si tu as un champs dateUpdate ou autre t'es obligé de le mettre dans le formulaire, et ça n'a aucun sens.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager