Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2015-11-07T15:38:58+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Vérifier si une entité est déjà présente en base, message #852932015-11-07T15:38:58+01:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/4487/verifier-si-une-entite-est-deja-presente-en-base/?page=1#p85293<figure><blockquote>
<p>[…] catcher l'exception (ce que tu peux faire et qui n'est pas forcément catastrophique, <em>vu que dans les deux cas t'as une requête</em>) […]</p>
</blockquote>
<figcaption><p><a href="#p85290">Nek</a></p></figcaption></figure><p>Pas faux <img alt=":p" src="/static/smileys/langue.png"></p>
<p>Je verrai à l'occasion si ça consomme plus de ressources de traiter l'exception (c'est probable que ce soit cette version la plus gourmande) ou de faire la requête à la main et tester son retour. Là, de toute manière, on est désormais en production.</p>Vérifier si une entité est déjà présente en base, message #852902015-11-07T15:33:27+01:00Nek/@Nekhttps://zestedesavoir.com/forums/sujet/4487/verifier-si-une-entite-est-deja-presente-en-base/?page=1#p85290<p>Ah non désolé, mis à part catcher l'exception (ce que tu peux faire et qui n'est pas forcément catastrophique, vu que dans les deux cas t'as une requête) il n'y a pas de truc prévu. Il faut juste être sûr d'avoir la bonne contrainte.</p>Vérifier si une entité est déjà présente en base, message #851092015-11-06T14:41:12+01:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/4487/verifier-si-une-entite-est-deja-presente-en-base/?page=1#p85109<p>Donc plutôt que de faire simplement <code>$entityManager->persist()</code> (ce que je fais actuellement), je peux faire <code>$repository->persist()</code>, c'est ce que tu es en train de me dire ?</p>
<h4>Edit</h4>
<p>Ah, je comprends <img alt=":honte:" src="/static/smileys/rouge.png"></p>
<p>M'enfin, je pensais quand-même qu'il y aurait une méthode déjà prête pour ce genre de cas.</p>Vérifier si une entité est déjà présente en base, message #850682015-11-06T10:12:13+01:00Nek/@Nekhttps://zestedesavoir.com/forums/sujet/4487/verifier-si-une-entite-est-deja-presente-en-base/?page=1#p85068<p>Ma foi, la contrainte faisant appel au repository de façon relativement simple… Tu n'as pas grand chose à faire, mis à part utiliser ton repository <img alt=":p" src="/static/smileys/langue.png"> . (rien n'est magique avec sf2!)</p>
<p>En fait le UnitOfWork aurait été utile si t'avais été dans la même exécution de page, mais bon du coup si t'es sur un cron, en effet…</p>Vérifier si une entité est déjà présente en base, message #848032015-11-04T16:57:49+01:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/4487/verifier-si-une-entite-est-deja-presente-en-base/?page=1#p84803<p>Merci Nek</p>
<p>Je ne pense pas qu'utiliser le unitOfWork me sera utile, parce que je ne crois pas qu'il contienne aussi les entités déjà persistées. En fait, c'est un travail qui sera lancé par un cron, et c'est à chaque exécution de ce dernier qu'il risque d'y avoir doublon. Entre deux, j'imagine volontiers que les entités "persistables" l'auront été.</p>
<p>Du coup, je vais voir pour reconstruire/récupérer la contrainte et valider à la main <img alt=":)" src="/static/smileys/smile.png"></p>Vérifier si une entité est déjà présente en base, message #847992015-11-04T16:21:35+01:00Nek/@Nekhttps://zestedesavoir.com/forums/sujet/4487/verifier-si-une-entite-est-deja-presente-en-base/?page=1#p84799<p>En fait c'est assez simple, il suffit de faire le check à la main (ce que fait <a href="https://github.com/symfony/symfony/blob/2.8/src/Symfony/Bridge/Doctrine/Validator/Constraints/UniqueEntityValidator.php#L115">le validator</a>).</p>
<p>C'est forcément plus joli avec un service qui s'en occupe.</p>
<p>Mais après, si tu es sûr que l'entité va exister dans l'exécution courante uniquement en doublon, tu peux utiliser le unitofwork de doctrine qui contient toutes les entités, et si tu fais une interface genre <a href="https://github.com/Nekland/Tools/blob/master/EqualableInterface.php">equalable</a> tu vas pouvoir tester que ton objet est identique facilement, même si tu ne l'as pas persisté (c'est une approche un peu java).</p>
<p>En espérant t'avoir aider <img alt=":-)" src="/static/smileys/smile.png"> .</p>Vérifier si une entité est déjà présente en base, message #846672015-11-03T17:40:11+01:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/4487/verifier-si-une-entite-est-deja-presente-en-base/?page=1#p84667<p>Justement, c'est une validation qui passe depuis un formulaire, pas quand l'entité est créé entièrement par programmation.</p>
<p>J'avais pensé à ça, d'ailleurs la contrainte de validation est présente, mais ça n'empêche pas Doctrine de persister (logique, la validation n'est pas du domaine de Doctrine).</p>Vérifier si une entité est déjà présente en base, message #846662015-11-03T17:28:50+01:00loic/@loichttps://zestedesavoir.com/forums/sujet/4487/verifier-si-une-entite-est-deja-presente-en-base/?page=1#p84666<p>Salut,</p>
<p>As-tu regardé du côté de <a href="http://symfony.com/doc/current/reference/constraints/UniqueEntity.html">UniqueEntity</a> ? A priori ça permet de vérifier qu'un (ou plusieurs) champ(s) soi(en)t unique(s).</p>
<p>Peut-être je me trompe carrément sur ce que tu souhaites faire <img alt="^^" src="/static/smileys/hihi.png"> ?</p>
<p>Bye</p>Vérifier si une entité est déjà présente en base, message #846622015-11-03T16:59:06+01:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/4487/verifier-si-une-entite-est-deja-presente-en-base/?page=1#p84662<p>Bonjour à tous !</p>
<p>Une fois de plus, je me tourne vers vous pour un cas un peu particulier.</p>
<p>J'ai une entité sur laquelle j'ai une contrainte d'unicité basée sur plusieurs champs, représentant une action faite par un utilisateur. L'idée étant que ces actions doivent donc être uniques.
Maintenant, il n'est pas impossible que ce qui fait enregistrer cette action survienne plusieurs fois. Mais ce que j'aimerais, c'est donc savoir si je risque de créer un doublon ou si je peux persister sans crainte. Certes, je peux m'amuser à persister et englober le tout dans un try/catch (c'est probablement ce que je vais faire en attendant), mais ça me paraît vraiment bourrin.</p>
<p>Il n'y a pas une méthode qui permettrait de "valider" une entité créé programmatiquement afin de justement tester et éviter le traitement d'une erreur ?</p>
<p>Merci d'avance</p>Soucis de persistance en cascade, message #768342015-10-08T11:29:48+02:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/3879/soucis-de-persistance-en-cascade/?page=1#p76834<p>Oui, et avec les deux éléments dedans. Seulement, à cette étape, l'ID des vouchers n'est pas spécifiée dans les traductions.</p>
<h4>Edit</h4>
<p>En fait, c'est logique pour le cas de la création d'un Voucher et de ses traductions, mais ce qui l'est moins, c'est l'exception levée au moment du <code>flush()</code> comme quoi la colonne <code>voucher_id</code> ne peut être nulle. La contrainte à ce niveau est correcte à mon avis : on ne peut avoir une traduction sans l'objet à traduire…</p>Soucis de persistance en cascade, message #768332015-10-08T11:17:40+02:00Nek/@Nekhttps://zestedesavoir.com/forums/sujet/3879/soucis-de-persistance-en-cascade/?page=1#p76833<p>Hello,</p>
<p>Ligne <code>45</code>, tu as fait un var_dump pour voir ce que tu récupères ? C'est bien un ArrayCollection ?</p>Soucis de persistance en cascade, message #768002015-10-07T21:56:56+02:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/3879/soucis-de-persistance-en-cascade/?page=1#p76800<p>Voilà le contrôleur.</p>
<div class="spoiler">
<p><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 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</pre></div></td><td class="code"><div class="codehilite"><pre><span class="cp"><?php</span>
<span class="k">namespace</span> <span class="nx">MyWonderfulBundle\Controller</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\HttpFoundation\Request</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Bundle\FrameworkBundle\Controller\Controller</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">MyWonderfulBundle\Entity\Voucher</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">MyWonderfulBundle\Form\VoucherType</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">MyWonderfulBundle\Entity\VoucherTranslation</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">\DateTime</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * Voucher controller.</span>
<span class="sd"> *</span>
<span class="sd"> */</span>
<span class="k">class</span> <span class="nc">VoucherController</span> <span class="k">extends</span> <span class="nx">Controller</span>
<span class="p">{</span>
<span class="sd">/**</span>
<span class="sd"> * Lists all Voucher entities.</span>
<span class="sd"> *</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">indexAction</span><span class="p">()</span>
<span class="p">{</span>
<span class="nv">$em</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">getDoctrine</span><span class="p">()</span><span class="o">-></span><span class="na">getManager</span><span class="p">();</span>
<span class="nv">$entities</span> <span class="o">=</span> <span class="nv">$em</span><span class="o">-></span><span class="na">getRepository</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Voucher'</span><span class="p">)</span><span class="o">-></span><span class="na">findAll</span><span class="p">();</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Voucher:index.html.twig'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'entities'</span> <span class="o">=></span> <span class="nv">$entities</span><span class="p">,</span>
<span class="p">));</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Creates a new Voucher entity.</span>
<span class="sd"> *</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">createAction</span><span class="p">(</span><span class="nx">Request</span> <span class="nv">$request</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$entity</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Voucher</span><span class="p">();</span>
<span class="nv">$form</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createCreateForm</span><span class="p">(</span><span class="nv">$entity</span><span class="p">);</span>
<span class="nv">$form</span><span class="o">-></span><span class="na">handleRequest</span><span class="p">(</span><span class="nv">$request</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$form</span><span class="o">-></span><span class="na">isValid</span><span class="p">())</span> <span class="p">{</span>
<span class="nv">$em</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">getDoctrine</span><span class="p">()</span><span class="o">-></span><span class="na">getManager</span><span class="p">();</span>
<span class="nv">$translations</span> <span class="o">=</span> <span class="nv">$entity</span><span class="o">-></span><span class="na">getVoucherTranslations</span><span class="p">();</span>
<span class="k">foreach</span> <span class="p">(</span><span class="nv">$translations</span> <span class="k">as</span> <span class="nv">$translation</span><span class="p">)</span> <span class="p">{</span>
<span class="nv">$entity</span><span class="o">-></span><span class="na">addVoucherTranslation</span><span class="p">(</span><span class="nv">$translation</span><span class="p">);</span>
<span class="p">}</span>
<span class="nv">$em</span><span class="o">-></span><span class="na">persist</span><span class="p">(</span><span class="nv">$entity</span><span class="p">);</span>
<span class="nv">$em</span><span class="o">-></span><span class="na">flush</span><span class="p">();</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">redirect</span><span class="p">(</span><span class="nv">$this</span><span class="o">-></span><span class="na">generateUrl</span><span class="p">(</span><span class="s1">'voucher_show'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="s1">'id'</span> <span class="o">=></span> <span class="nv">$entity</span><span class="o">-></span><span class="na">getId</span><span class="p">())));</span>
<span class="p">}</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Voucher:new.html.twig'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'entity'</span> <span class="o">=></span> <span class="nv">$entity</span><span class="p">,</span>
<span class="s1">'form'</span> <span class="o">=></span> <span class="nv">$form</span><span class="o">-></span><span class="na">createView</span><span class="p">(),</span>
<span class="p">));</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Creates a form to create a Voucher entity.</span>
<span class="sd"> *</span>
<span class="sd"> * @param Voucher $entity The entity</span>
<span class="sd"> *</span>
<span class="sd"> * @return \Symfony\Component\Form\Form The form</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="k">function</span> <span class="nf">createCreateForm</span><span class="p">(</span><span class="nx">Voucher</span> <span class="nv">$entity</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$form</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createForm</span><span class="p">(</span><span class="k">new</span> <span class="nx">VoucherType</span><span class="p">(),</span> <span class="nv">$entity</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'action'</span> <span class="o">=></span> <span class="nv">$this</span><span class="o">-></span><span class="na">generateUrl</span><span class="p">(</span><span class="s1">'voucher_create'</span><span class="p">),</span>
<span class="s1">'method'</span> <span class="o">=></span> <span class="s1">'POST'</span><span class="p">,</span>
<span class="p">));</span>
<span class="nv">$form</span><span class="o">-></span><span class="na">add</span><span class="p">(</span><span class="s1">'submit'</span><span class="p">,</span> <span class="s1">'submit'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="s1">'label'</span> <span class="o">=></span> <span class="s1">'Create'</span><span class="p">));</span>
<span class="k">return</span> <span class="nv">$form</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Displays a form to create a new Voucher entity.</span>
<span class="sd"> *</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">newAction</span><span class="p">()</span>
<span class="p">{</span>
<span class="nv">$entity</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Voucher</span><span class="p">();</span>
<span class="nv">$languages</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">getDoctrine</span><span class="p">()</span><span class="o">-></span><span class="na">getRepository</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Language'</span><span class="p">)</span><span class="o">-></span><span class="na">findAllActivatedBut</span><span class="p">(</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">container</span><span class="o">-></span><span class="na">getParameter</span><span class="p">(</span><span class="s1">'locale'</span><span class="p">)</span>
<span class="p">);</span>
<span class="k">foreach</span> <span class="p">(</span><span class="nv">$languages</span> <span class="k">as</span> <span class="nv">$language</span><span class="p">)</span> <span class="p">{</span>
<span class="nv">$translation</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">VoucherTranslation</span><span class="p">();</span>
<span class="nv">$translation</span><span class="o">-></span><span class="na">setLanguage</span><span class="p">(</span><span class="nv">$language</span><span class="p">);</span>
<span class="nv">$entity</span><span class="o">-></span><span class="na">addVoucherTranslation</span><span class="p">(</span><span class="nv">$translation</span><span class="p">);</span>
<span class="p">}</span>
<span class="nv">$form</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createCreateForm</span><span class="p">(</span><span class="nv">$entity</span><span class="p">);</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Voucher:new.html.twig'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'entity'</span> <span class="o">=></span> <span class="nv">$entity</span><span class="p">,</span>
<span class="s1">'form'</span> <span class="o">=></span> <span class="nv">$form</span><span class="o">-></span><span class="na">createView</span><span class="p">(),</span>
<span class="p">));</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Finds and displays a Voucher entity.</span>
<span class="sd"> *</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">showAction</span><span class="p">(</span><span class="nv">$id</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$em</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">getDoctrine</span><span class="p">()</span><span class="o">-></span><span class="na">getManager</span><span class="p">();</span>
<span class="nv">$entity</span> <span class="o">=</span> <span class="nv">$em</span><span class="o">-></span><span class="na">getRepository</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Voucher'</span><span class="p">)</span><span class="o">-></span><span class="na">find</span><span class="p">(</span><span class="nv">$id</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nv">$entity</span><span class="p">)</span> <span class="p">{</span>
<span class="k">throw</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createNotFoundException</span><span class="p">(</span><span class="s1">'Unable to find Voucher entity.'</span><span class="p">);</span>
<span class="p">}</span>
<span class="nv">$languages</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">getDoctrine</span><span class="p">()</span><span class="o">-></span><span class="na">getRepository</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Language'</span><span class="p">)</span><span class="o">-></span><span class="na">findAllActivatedBut</span><span class="p">(</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">container</span><span class="o">-></span><span class="na">getParameter</span><span class="p">(</span><span class="s1">'locale'</span><span class="p">)</span>
<span class="p">);</span>
<span class="k">foreach</span> <span class="p">(</span><span class="nv">$languages</span> <span class="k">as</span> <span class="nv">$language</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$entity</span><span class="o">-></span><span class="na">hasTranslation</span><span class="p">(</span><span class="nv">$language</span><span class="o">-></span><span class="na">getCode</span><span class="p">()))</span> <span class="p">{</span>
<span class="k">continue</span><span class="p">;</span>
<span class="p">}</span>
<span class="nv">$translation</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">VoucherTranslation</span><span class="p">();</span>
<span class="nv">$translation</span><span class="o">-></span><span class="na">setLanguage</span><span class="p">(</span><span class="nv">$language</span><span class="p">);</span>
<span class="nv">$entity</span><span class="o">-></span><span class="na">addVoucherTranslation</span><span class="p">(</span><span class="nv">$translation</span><span class="p">);</span>
<span class="p">}</span>
<span class="nv">$deleteForm</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createDeleteForm</span><span class="p">(</span><span class="nv">$id</span><span class="p">);</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Voucher:show.html.twig'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'entity'</span> <span class="o">=></span> <span class="nv">$entity</span><span class="p">,</span>
<span class="s1">'delete_form'</span> <span class="o">=></span> <span class="nv">$deleteForm</span><span class="o">-></span><span class="na">createView</span><span class="p">(),</span>
<span class="p">));</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Displays a form to edit an existing Voucher entity.</span>
<span class="sd"> *</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">editAction</span><span class="p">(</span><span class="nv">$id</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$em</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">getDoctrine</span><span class="p">()</span><span class="o">-></span><span class="na">getManager</span><span class="p">();</span>
<span class="nv">$entity</span> <span class="o">=</span> <span class="nv">$em</span><span class="o">-></span><span class="na">getRepository</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Voucher'</span><span class="p">)</span><span class="o">-></span><span class="na">find</span><span class="p">(</span><span class="nv">$id</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nv">$entity</span><span class="p">)</span> <span class="p">{</span>
<span class="k">throw</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createNotFoundException</span><span class="p">(</span><span class="s1">'Unable to find Voucher entity.'</span><span class="p">);</span>
<span class="p">}</span>
<span class="nv">$editForm</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createEditForm</span><span class="p">(</span><span class="nv">$entity</span><span class="p">);</span>
<span class="nv">$deleteForm</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createDeleteForm</span><span class="p">(</span><span class="nv">$id</span><span class="p">);</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Voucher:edit.html.twig'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'entity'</span> <span class="o">=></span> <span class="nv">$entity</span><span class="p">,</span>
<span class="s1">'edit_form'</span> <span class="o">=></span> <span class="nv">$editForm</span><span class="o">-></span><span class="na">createView</span><span class="p">(),</span>
<span class="s1">'delete_form'</span> <span class="o">=></span> <span class="nv">$deleteForm</span><span class="o">-></span><span class="na">createView</span><span class="p">(),</span>
<span class="p">));</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Creates a form to edit a Voucher entity.</span>
<span class="sd"> *</span>
<span class="sd"> * @param Voucher $entity The entity</span>
<span class="sd"> *</span>
<span class="sd"> * @return \Symfony\Component\Form\Form The form</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="k">function</span> <span class="nf">createEditForm</span><span class="p">(</span><span class="nx">Voucher</span> <span class="nv">$entity</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$form</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createForm</span><span class="p">(</span><span class="k">new</span> <span class="nx">VoucherType</span><span class="p">(),</span> <span class="nv">$entity</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'action'</span> <span class="o">=></span> <span class="nv">$this</span><span class="o">-></span><span class="na">generateUrl</span><span class="p">(</span><span class="s1">'voucher_update'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="s1">'id'</span> <span class="o">=></span> <span class="nv">$entity</span><span class="o">-></span><span class="na">getId</span><span class="p">())),</span>
<span class="s1">'method'</span> <span class="o">=></span> <span class="s1">'PUT'</span><span class="p">,</span>
<span class="p">));</span>
<span class="nv">$form</span><span class="o">-></span><span class="na">add</span><span class="p">(</span><span class="s1">'submit'</span><span class="p">,</span> <span class="s1">'submit'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="s1">'label'</span> <span class="o">=></span> <span class="s1">'Update'</span><span class="p">));</span>
<span class="k">return</span> <span class="nv">$form</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Edits an existing Voucher entity.</span>
<span class="sd"> *</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">updateAction</span><span class="p">(</span><span class="nx">Request</span> <span class="nv">$request</span><span class="p">,</span> <span class="nv">$id</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$em</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">getDoctrine</span><span class="p">()</span><span class="o">-></span><span class="na">getManager</span><span class="p">();</span>
<span class="nv">$entity</span> <span class="o">=</span> <span class="nv">$em</span><span class="o">-></span><span class="na">getRepository</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Voucher'</span><span class="p">)</span><span class="o">-></span><span class="na">find</span><span class="p">(</span><span class="nv">$id</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nv">$entity</span><span class="p">)</span> <span class="p">{</span>
<span class="k">throw</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createNotFoundException</span><span class="p">(</span><span class="s1">'Unable to find Voucher entity.'</span><span class="p">);</span>
<span class="p">}</span>
<span class="nv">$deleteForm</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createDeleteForm</span><span class="p">(</span><span class="nv">$id</span><span class="p">);</span>
<span class="nv">$editForm</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createEditForm</span><span class="p">(</span><span class="nv">$entity</span><span class="p">);</span>
<span class="nv">$editForm</span><span class="o">-></span><span class="na">handleRequest</span><span class="p">(</span><span class="nv">$request</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$editForm</span><span class="o">-></span><span class="na">isValid</span><span class="p">())</span> <span class="p">{</span>
<span class="nv">$em</span><span class="o">-></span><span class="na">flush</span><span class="p">();</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">redirect</span><span class="p">(</span><span class="nv">$this</span><span class="o">-></span><span class="na">generateUrl</span><span class="p">(</span><span class="s1">'voucher_edit'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="s1">'id'</span> <span class="o">=></span> <span class="nv">$id</span><span class="p">)));</span>
<span class="p">}</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">render</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Voucher:edit.html.twig'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'entity'</span> <span class="o">=></span> <span class="nv">$entity</span><span class="p">,</span>
<span class="s1">'edit_form'</span> <span class="o">=></span> <span class="nv">$editForm</span><span class="o">-></span><span class="na">createView</span><span class="p">(),</span>
<span class="s1">'delete_form'</span> <span class="o">=></span> <span class="nv">$deleteForm</span><span class="o">-></span><span class="na">createView</span><span class="p">(),</span>
<span class="p">));</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Deletes a Voucher entity.</span>
<span class="sd"> *</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">deleteAction</span><span class="p">(</span><span class="nx">Request</span> <span class="nv">$request</span><span class="p">,</span> <span class="nv">$id</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$form</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createDeleteForm</span><span class="p">(</span><span class="nv">$id</span><span class="p">);</span>
<span class="nv">$form</span><span class="o">-></span><span class="na">handleRequest</span><span class="p">(</span><span class="nv">$request</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$form</span><span class="o">-></span><span class="na">isValid</span><span class="p">())</span> <span class="p">{</span>
<span class="nv">$em</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">getDoctrine</span><span class="p">()</span><span class="o">-></span><span class="na">getManager</span><span class="p">();</span>
<span class="nv">$entity</span> <span class="o">=</span> <span class="nv">$em</span><span class="o">-></span><span class="na">getRepository</span><span class="p">(</span><span class="s1">'MyWonderfulBundle:Voucher'</span><span class="p">)</span><span class="o">-></span><span class="na">find</span><span class="p">(</span><span class="nv">$id</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nv">$entity</span><span class="p">)</span> <span class="p">{</span>
<span class="k">throw</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createNotFoundException</span><span class="p">(</span><span class="s1">'Unable to find Voucher entity.'</span><span class="p">);</span>
<span class="p">}</span>
<span class="nv">$em</span><span class="o">-></span><span class="na">remove</span><span class="p">(</span><span class="nv">$entity</span><span class="p">);</span>
<span class="nv">$em</span><span class="o">-></span><span class="na">flush</span><span class="p">();</span>
<span class="p">}</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">redirect</span><span class="p">(</span><span class="nv">$this</span><span class="o">-></span><span class="na">generateUrl</span><span class="p">(</span><span class="s1">'voucher'</span><span class="p">));</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Creates a form to delete a Voucher entity by id.</span>
<span class="sd"> *</span>
<span class="sd"> * @param mixed $id The entity id</span>
<span class="sd"> *</span>
<span class="sd"> * @return \Symfony\Component\Form\Form The form</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="k">function</span> <span class="nf">createDeleteForm</span><span class="p">(</span><span class="nv">$id</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">createFormBuilder</span><span class="p">()</span>
<span class="o">-></span><span class="na">setAction</span><span class="p">(</span><span class="nv">$this</span><span class="o">-></span><span class="na">generateUrl</span><span class="p">(</span><span class="s1">'voucher_delete'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="s1">'id'</span> <span class="o">=></span> <span class="nv">$id</span><span class="p">)))</span>
<span class="o">-></span><span class="na">setMethod</span><span class="p">(</span><span class="s1">'DELETE'</span><span class="p">)</span>
<span class="o">-></span><span class="na">add</span><span class="p">(</span><span class="s1">'submit'</span><span class="p">,</span> <span class="s1">'submit'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span><span class="s1">'label'</span> <span class="o">=></span> <span class="s1">'Delete'</span><span class="p">))</span>
<span class="o">-></span><span class="na">getForm</span><span class="p">()</span>
<span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>
</p>
</div>Soucis de persistance en cascade, message #767982015-10-07T21:46:25+02:00Nek/@Nekhttps://zestedesavoir.com/forums/sujet/3879/soucis-de-persistance-en-cascade/?page=1#p76798<p>Le contrôleur (ou service, peu importe) qui créé et persiste l'entité. (laisse tes entités, on ne sait jamais ça peut être utile)</p>Soucis de persistance en cascade, message #767182015-10-07T13:21:45+02:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/3879/soucis-de-persistance-en-cascade/?page=1#p76718<p>Quelles classes souhaiterais-tu voir ?</p>Comportement différent selon l'environnement, message #767172015-10-07T13:21:12+02:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/4214/comportement-different-selon-lenvironnement/?page=1#p76717<p>Bonjour à tous !</p>
<p>J’ai un comportement que je n’arrive pas à cerner, et qui me paraît presque être un vrai bug de Symfony que de l’<abbr title="Interface Chaise-Clavier">ICC</abbr>.</p>
<p>J’ai un formulaire avec un champ de type <code>choice</code>, dont je rends chaque option séparément en utilisant <code>form_widget(form.choiceField.0)</code>, <code>form_widget(form.choiceField.1)</code>, etc.<br>
Entre les options ainsi rendues, j’ai d’autres champs qui viennent. Le code est ci-dessous. L’idée étant de choisir un type de média et de renseigner le ou les champ(s) relatifs à ce type.</p>
<p>Maintenant, il se trouve que si les options de mon choiceField sont forcément requises, il n’en est pas de même pour les champs "intercalaires". Avec l’environnement de dev, pas de problème. Mais avec l’environnement de production, ces champs intercalaires, même s’ils sont bien spécifiés comme non requis dans le FormType, l’attribut <code>required</code> est ajouté. Du coup, on doit renseigner les informations pour tous les types de média alors qu’on n’enregistrera que les données d’un seul.</p>
<p>Il paraît que c’est quelque chose de connu, mais je n’ai pas réussi à en trouver trace sur le repository officiel, et n’ai pas de solution pour l’instant.<br>
Est-ce que quelqu’un aurait déjà observé un tel comportement et aurait un <em>workaround</em> à me proposer ?</p>
<div class="custom-block custom-block-information"><div class="custom-block-body"><p>Je précise que je parle des environnements Symfony. Ce souci a été constaté sur trois machines différentes en comparant le code HTML généré en passant par app.php et app_dev.php sur la même machine, tous caches purgés.</p></div></div>
<p>Merci d’avance</p>
<div class="custom-block custom-block-spoiler"><div class="custom-block-body"><figure><div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-php"><span class="hljs-meta"><?php</span>
<span class="hljs-keyword">namespace</span> <span class="hljs-title">MyWonderfulBundle</span>\<span class="hljs-title">Entity</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Doctrine</span>\<span class="hljs-title">ORM</span>\<span class="hljs-title">Mapping</span> <span class="hljs-title">as</span> <span class="hljs-title">ORM</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Validator</span>\<span class="hljs-title">Constraints</span> <span class="hljs-title">as</span> <span class="hljs-title">Assert</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">HttpFoundation</span>\<span class="hljs-title">File</span>\<span class="hljs-title">UploadedFile</span>;
<span class="hljs-comment">/**
* Media
* <span class="hljs-doctag">@ORM</span>\HasLifecycleCallbacks
* <span class="hljs-doctag">@ORM</span>\Table(name="media")
* <span class="hljs-doctag">@ORM</span>\Entity
*/</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Media</span>
</span>{
<span class="hljs-keyword">const</span> UPLOAD_DIR = <span class="hljs-string">'uploads/medias'</span>;
<span class="hljs-keyword">const</span> VIDEO = <span class="hljs-string">'video'</span>;
<span class="hljs-keyword">const</span> IMAGE = <span class="hljs-string">'image'</span>;
<span class="hljs-keyword">const</span> YOUTUBE_EMBED_BASE = <span class="hljs-string">'//www.youtube.com/embed/'</span>;
<span class="hljs-keyword">const</span> VIMEO_EMBED_BASE = <span class="hljs-string">'//player.vimeo.com/video/'</span>;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> integer
*
* <span class="hljs-doctag">@ORM</span>\Column(name="id", type="integer", nullable=false)
* <span class="hljs-doctag">@ORM</span>\Id
* <span class="hljs-doctag">@ORM</span>\GeneratedValue(strategy="IDENTITY")
*/</span>
<span class="hljs-keyword">private</span> $id;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> string
*
* <span class="hljs-doctag">@ORM</span>\Column(name="type", type="string", length=255, nullable=false)
*/</span>
<span class="hljs-keyword">private</span> $type;
<span class="hljs-comment">/**
* The name of the media.
* It can be the name of the image or the identifier of the video
*
* <span class="hljs-doctag">@var</span> string
*
* <span class="hljs-doctag">@ORM</span>\Column(name="name", type="string", length=255, nullable=true)
*/</span>
<span class="hljs-keyword">private</span> $name;
<span class="hljs-comment">/**
* The path of the media.
* This can be the base URL for a distant media, mostly the base embed URL
* for videos
*
* <span class="hljs-doctag">@var</span> string
*
* <span class="hljs-doctag">@ORM</span>\Column(name="path", type="string", length=255, nullable=true)
*/</span>
<span class="hljs-keyword">private</span> $path;
<span class="hljs-comment">/**
* <span class="hljs-doctag">@var</span> \DateTime
*
* <span class="hljs-doctag">@ORM</span>\Column(name="updatedAt", type="datetime", nullable=true)
*/</span>
<span class="hljs-keyword">private</span> $updatedAt;
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">__toString</span><span class="hljs-params">()</span> </span>{
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>->getName();
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getTypeMedia</span><span class="hljs-params">()</span> </span>{
<span class="hljs-keyword">return</span> <span class="hljs-keyword">array</span>(<span class="hljs-keyword">self</span>::IMAGE => <span class="hljs-keyword">self</span>::IMAGE, <span class="hljs-keyword">self</span>::VIDEO => <span class="hljs-keyword">self</span>::VIDEO);
}
<span class="hljs-comment">/**
* Get id
*
* <span class="hljs-doctag">@return</span> integer
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getId</span><span class="hljs-params">()</span>
</span>{
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>->id;
}
<span class="hljs-comment">/**
* Set type
*
* <span class="hljs-doctag">@param</span> string $type
* <span class="hljs-doctag">@return</span> Media
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setType</span><span class="hljs-params">($type)</span>
</span>{
<span class="hljs-keyword">$this</span>->type = $type;
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>;
}
<span class="hljs-comment">/**
* Get type
*
* <span class="hljs-doctag">@return</span> string
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getType</span><span class="hljs-params">()</span>
</span>{
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>->type;
}
<span class="hljs-comment">/**
* Set path
*
* <span class="hljs-doctag">@param</span> string $path
* <span class="hljs-doctag">@return</span> Media
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setPath</span><span class="hljs-params">($path)</span>
</span>{
<span class="hljs-keyword">$this</span>->path = $path;
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>;
}
<span class="hljs-comment">/**
* Get path
*
* <span class="hljs-doctag">@return</span> string
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getPath</span><span class="hljs-params">()</span>
</span>{
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>->path;
}
<span class="hljs-comment">/**
* Set name
*
* <span class="hljs-doctag">@param</span> string $name
* <span class="hljs-doctag">@return</span> Media
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setName</span><span class="hljs-params">($name)</span>
</span>{
<span class="hljs-keyword">$this</span>->name = $name;
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>;
}
<span class="hljs-comment">/**
* Get name
*
* <span class="hljs-doctag">@return</span> string
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getName</span><span class="hljs-params">()</span>
</span>{
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>->name;
}
<span class="hljs-comment">/**
* Set updatedAt
*
* <span class="hljs-doctag">@param</span> string $updatedAt
* <span class="hljs-doctag">@return</span> Media
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setUpdatedAt</span><span class="hljs-params">($updatedAt)</span>
</span>{
<span class="hljs-keyword">$this</span>->updatedAt = $updatedAt;
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>;
}
<span class="hljs-comment">/**
* Get updatedAt
*
* <span class="hljs-doctag">@return</span> string
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getUpdatedAt</span><span class="hljs-params">()</span>
</span>{
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>->updatedAt;
}
<span class="hljs-comment">/*************************************************************/</span>
<span class="hljs-comment">/**
* <span class="hljs-doctag">@Assert</span>\Image(
* minWidth = 600,
* minWidthMessage="L'image doit avoir une largeur minimale de 660 pixels",
* minHeight = 400,
* minHeightMessage="L'image doit avoir une hauteur minimale de 412 pixels",
* )
*/</span>
<span class="hljs-keyword">public</span> $file;
<span class="hljs-comment">// Getters et setters comme à l'accoutumée</span>
}
</code></pre></div><figcaption>Mon entité Media</figcaption></figure><figure><div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-php"><span class="hljs-meta"><?php</span>
<span class="hljs-keyword">namespace</span> <span class="hljs-title">MyWonderfulBundle</span>\<span class="hljs-title">Form</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">AbstractType</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">FormBuilderInterface</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">OptionsResolver</span>\<span class="hljs-title">OptionsResolver</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">FormEvent</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">FormEvents</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">MyWonderfulBundle</span>\<span class="hljs-title">Entity</span>\<span class="hljs-title">Media</span>;
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MediaType</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">AbstractType</span>
</span>{
<span class="hljs-comment">/**
* <span class="hljs-doctag">@param</span> FormBuilderInterface $builder
* <span class="hljs-doctag">@param</span> array $options
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">buildForm</span><span class="hljs-params">(FormBuilderInterface $builder, array $options)</span>
</span>{
$builder
->add(<span class="hljs-string">'type'</span>, <span class="hljs-string">'choice'</span>, <span class="hljs-keyword">array</span>(
<span class="hljs-string">'choices'</span> => Media::getTypeMedia(),
<span class="hljs-string">'expanded'</span> => <span class="hljs-keyword">true</span>,
<span class="hljs-string">'multiple'</span> => <span class="hljs-keyword">false</span>,
<span class="hljs-string">'attr'</span> => <span class="hljs-keyword">array</span>(
<span class="hljs-string">'class'</span> => <span class="hljs-string">'radio'</span>
)
))
->add(<span class="hljs-string">'video_url'</span>, <span class="hljs-string">'text'</span>, <span class="hljs-keyword">array</span>(
<span class="hljs-string">'required'</span> => <span class="hljs-keyword">false</span>,
))
->add(<span class="hljs-string">'file'</span>, <span class="hljs-string">'file'</span>, <span class="hljs-keyword">array</span>(
<span class="hljs-string">'required'</span> => <span class="hljs-keyword">false</span>,
<span class="hljs-string">'label'</span> => <span class="hljs-string">'Image'</span>,
<span class="hljs-string">'attr'</span> => <span class="hljs-keyword">array</span>(
<span class="hljs-string">'accept'</span> => <span class="hljs-string">'image/*'</span>,
<span class="hljs-string">'class'</span> => <span class="hljs-string">'filestyle'</span>
)
))
->add(<span class="hljs-string">'name'</span>, <span class="hljs-string">'hidden'</span>)
->add(<span class="hljs-string">'path'</span>, <span class="hljs-string">'hidden'</span>)
->add(<span class="hljs-string">'updatedAt'</span>, <span class="hljs-string">'datetime'</span>, <span class="hljs-keyword">array</span>(
<span class="hljs-string">'data'</span> => <span class="hljs-keyword">new</span> \DateTime(),
<span class="hljs-string">'attr'</span> => <span class="hljs-keyword">array</span>(<span class="hljs-string">'class'</span> => <span class="hljs-string">'hidden'</span>),
<span class="hljs-string">'label'</span> => <span class="hljs-keyword">false</span>
))
;
}
<span class="hljs-comment">/**
* <span class="hljs-doctag">@param</span> OptionsResolver $resolver
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">configureOptions</span><span class="hljs-params">(OptionsResolver $resolver)</span>
</span>{
$resolver->setDefaults(<span class="hljs-keyword">array</span>(
<span class="hljs-string">'data_class'</span> => <span class="hljs-string">'MyWonderfulBundle\Entity\Media'</span>
));
}
<span class="hljs-comment">/**
* <span class="hljs-doctag">@return</span> string
*/</span>
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getName</span><span class="hljs-params">()</span>
</span>{
<span class="hljs-keyword">return</span> <span class="hljs-string">'my_wonderful_bundle_media'</span>;
}
}
</code></pre></div><figcaption>Le FormType associé</figcaption></figure><figure><div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-html+django"><div class="well">
{% if form.vars.value is not empty -%}
{% if form.type.vars.value == constant('MyWonderfulBundle\\Entity\\Media::IMAGE') -%}
{{ form.vars.value|media({'class':'img-thumbnail ' ~ form.parent.vars.name|slice(0, -1)}) }}
{% elseif form.type.vars.value == constant('MyWonderfulBundle\\Entity\\Media::VIDEO') -%}
{{ form.vars.value|media({'width':'150','height':'150'}) }}
{%- endif %}
{%- endif %}
<div class="form-group clearfix">
{{ form_widget(form.type.0, (displayVideo ? {} : {'attr': {'checked': true}, 'label_attr': {'class': 'hidden'}})) }}
</div>
<div class="form-group clearfix">
{{ form_widget(form.file) }}
</div>
{% if displayVideo %}
<div class="form-group clearfix">
{{ form_widget(form.type.1) }}
</div>
<div class="form-group clearfix">
{{ form_widget(form.video_url) }}
</div>
{% endif %}
{{ form_widget(form.name) }}
{{ form_widget(form.updatedAt) }}
</div>
</code></pre></div><figcaption>Le template pour le formulaire de l’entité</figcaption></figure></div></div>
<h4 id="edit-9-octobre-2015">Edit 9 octobre 2015<a aria-hidden="true" href="#edit-9-octobre-2015"><span class="icon icon-link"></span></a></h4>
<p>Il n’est pas impossible que ce soit dû à l’utilisation d’une macro plutôt que le système de templating. La piste me vient de <a href="https://github.com/symfony/symfony/issues/15544" title="[Bug] [Form] 2.7 - Form collection prototype required option">cette discussion</a>, plus précisement <a href="https://github.com/symfony/symfony/issues/15544#issuecomment-130710735">la réponse de stof</a> qui précise un souci avec la gestion de <code>required</code> du fait des macros existantes.</p>
<h4 id="edit-9-octobre-2015-2">Edit 9 octobre 2015 <sub>2</sub><a aria-hidden="true" href="#edit-9-octobre-2015-2"><span class="icon icon-link"></span></a></h4>
<p>Fausse joie : avec le templating, c’est pareil… Voici le HTML généré par la même machine et le même code, en haut en dev' et en bas en prod' :</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span></div><pre><code class="hljs language-html"><span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"my_wonderfulbundle_product_galleryMedias_1_file"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"my_wonderfulbundle_product[galleryMedias][1][file]"</span> <span class="hljs-attr">accept</span>=<span class="hljs-string">"image/*"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"filestyle ajaxUpload"</span> <span class="hljs-attr">data-uri</span>=<span class="hljs-string">"/app_dev.php/media/_upload"</span> <span class="hljs-attr">data-target</span>=<span class="hljs-string">"uploads/medias"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"file"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"my_wonderfulbundle_product_galleryMedias_1_file"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"my_wonderfulbundle_product[galleryMedias][1][file]"</span> <span class="hljs-attr">required</span>=<span class="hljs-string">"required"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"ajaxUpload"</span> <span class="hljs-attr">data-uri</span>=<span class="hljs-string">"/app.php/media/_upload"</span> <span class="hljs-attr">data-target</span>=<span class="hljs-string">"uploads/medias"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"file"</span>></span>
</code></pre></div>
<p>Temporairement, j’ai rendu mon champ "à l’ancienne". Mais si quelqu’un avait un comportement similaire, qu’il comprenait la raison et qu’il avait la bonne solution au sens Symfony, je serais très intéressé.</p>Soucis de persistance en cascade, message #724252015-09-10T22:39:19+02:00Nek/@Nekhttps://zestedesavoir.com/forums/sujet/3879/soucis-de-persistance-en-cascade/?page=1#p72425<p>Hello,</p>
<p>Il est vrai que dans tes explications rien ne cloche. Après le problème est probablement dans le code. Du coup il va falloir que tu nous en montre un peu plus…</p>Soucis de persistance en cascade, message #716512015-09-05T00:41:29+02:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/3879/soucis-de-persistance-en-cascade/?page=1#p71651<p>J'y ai pensé aussi, mais cela n'explique pas que ça pose problème pour une autre entité très similaire, mais avec des IDs gérés par Doctrine… Non, je pense qu'il y a une subtilité qui doit m'échapper à un moment, le souci n'est pas directement lié à mon ID particulier.</p>Soucis de persistance en cascade, message #716432015-09-04T21:23:27+02:00John/@Johnhttps://zestedesavoir.com/forums/sujet/3879/soucis-de-persistance-en-cascade/?page=1#p71643<p>Salut,</p>
<p>Ne serait-ce pas Doctrine qui, ne gérant pas lui-même l'ID, fait mal son boulot ?
J'ai récemment eu un problème sur les ID : je les settais manuellement, mais Doctrine réécrivait par dessus mes ID. Je sais que ce n'est pas le même problème, mais je n'ai pas d'autre piste à donner. :s</p>Soucis de persistance en cascade, message #714802015-09-02T12:51:21+02:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/3879/soucis-de-persistance-en-cascade/?page=1#p71480<p>Aucune idée qui puisse révolutionner la chose ? <img alt=":(" src="/static/smileys/triste.png"></p>Soucis de persistance en cascade, message #700442015-08-20T21:46:24+02:00Davidbrcz/@Davidbrczhttps://zestedesavoir.com/forums/sujet/3879/soucis-de-persistance-en-cascade/?page=1#p70044<p>Test</p>Soucis de persistance en cascade, message #699082015-08-19T18:07:25+02:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/3879/soucis-de-persistance-en-cascade/?page=1#p69908<p>Bonjour à tous !</p>
<p>Aujourd'hui, je suis confronté à un comportement que je n'attendais certainement pas, et que d'habitude, j'arrive à résoudre, mais là, je ne comprends pas tout.</p>
<p>J'ai une entité Voucher dont l'ID est un code que je peux modifier à la création (donc une chaîne pseudo-aléatoire). Ce bon possède un intitulé qui doit être traduit. Du coup, j'ai une collection de VoucherTranslation pour gérer ça.</p>
<p>Cependant, et c'est bien la première fois, l'enregistrement en cascade ne fonctionne pas, pour une raison qui m'échappe : l'ID du bon, que les traductions doivent avoir pour être enregistrées, n'est apparemment jamais renseignée dans l'objet.</p>
<p>J'ai suivi <a href="/forums/sujet/1352/foire-aux-questions-symfony-2/#p23294">mes propres conseils de la FAQ Symfony 2</a>, j'ai aussi joué avec <code>by_reference</code>, mais rien n'y fait. Au final, j'ai trouvé une solution que je trouve hideuse, et qui plus est peu logique : j'ajoute à nouveau mes traductions dans mon objet avant de le persister, ce qui fait qu'ils se retrouvent à double dans la collection, mais sont cependant bien enregistrés, et une seule fois chacun.</p>
<p>Le plus étrange est que j'ai remarqué aujourd'hui que dans le même projet, j'ai une autre entité similaire dans sa structure pour laquelle j'ai aussi le problème, actuellement réglé par un collègue avec une solution plus symfoniesque, mais tout aussi illogiquement nécessaire à mon goût, et cette entité n'a pas d'ID qui soit généré côté PHP. Et, toujours dans le même projet, j'ai des entités "normales" pour lesquelles je n'ai aucun souci de persistance pour les traductions.</p>
<p>Est-ce que quelqu'un a déjà eu ce genre de comportement ?</p>
<p>Merci d'avance <img alt=":)" src="/static/smileys/smile.png"></p>
<h4>Edit</h4>
<p>Voilà, un peu de temps pour fournir le code.<br>
L'entité parent :</p>
<div class="spoiler">
<p><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 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
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308</pre></div></td><td class="code"><div class="codehilite"><pre><span class="cp"><?php</span>
<span class="k">namespace</span> <span class="nx">MyWonderfulBundle\Entity</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Doctrine\ORM\Mapping</span> <span class="k">as</span> <span class="nx">ORM</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * Voucher</span>
<span class="sd"> *</span>
<span class="sd"> * @ORM\Table(name="voucher")</span>
<span class="sd"> * @ORM\Entity(repositoryClass="MyWonderfulBundle\Entity\Repository\VoucherRepository")</span>
<span class="sd"> */</span>
<span class="k">class</span> <span class="nc">Voucher</span>
<span class="p">{</span>
<span class="sd">/**</span>
<span class="sd"> * The code to identify the voucher</span>
<span class="sd"> * @var string</span>
<span class="sd"> *</span>
<span class="sd"> * @ORM\Column(name="id", type="string", length=7)</span>
<span class="sd"> * @ORM\Id</span>
<span class="sd"> * @ORM\GeneratedValue(strategy="NONE")</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="nv">$id</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * The title of the voucher, might be the reason why it was issued</span>
<span class="sd"> * @var string</span>
<span class="sd"> *</span>
<span class="sd"> * @ORM\Column(name="title", type="string", length=255, nullable=false)</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="nv">$title</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * The amount the voucher represents</span>
<span class="sd"> * @var string</span>
<span class="sd"> *</span>
<span class="sd"> * @ORM\Column(name="amount", type="decimal", precision=5, scale=2, nullable=false)</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="nv">$amount</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * The number of times the voucher can be used in total</span>
<span class="sd"> * @var integer</span>
<span class="sd"> *</span>
<span class="sd"> * @ORM\Column(name="quantity", type="smallint", nullable=true)</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="nv">$quantity</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * The last date when the voucher can be used</span>
<span class="sd"> * @var \DateTime</span>
<span class="sd"> *</span>
<span class="sd"> * @ORM\Column(name="until", type="datetime", nullable=true)</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="nv">$until</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * The persons who used this voucher</span>
<span class="sd"> * @var \MyWonderfulBundle\Entity\Person</span>
<span class="sd"> *</span>
<span class="sd"> * @ORM\ManyToMany(targetEntity="MyWonderfulBundle\Entity\Person")</span>
<span class="sd"> * @ORM\JoinTable(</span>
<span class="sd"> * name="voucher_person",</span>
<span class="sd"> * joinColumns={@ORM\JoinColumn(name="voucher_code", referencedColumnName="id")},</span>
<span class="sd"> * inverseJoinColumns={@ORM\JoinColumn(name="person_id", referencedColumnName="id", unique=true)}</span>
<span class="sd"> * )</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="nv">$persons</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * @var \MyWonderfulBundle\Entity\VoucherTranslation</span>
<span class="sd"> *</span>
<span class="sd"> * @ORM\OneToMany(targetEntity="MyWonderfulBundle\Entity\VoucherTranslation", mappedBy="voucher", cascade={"persist"})</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="nv">$voucherTranslations</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * @ORM\OneToMany(targetEntity="MyWonderfulBundle\Entity\Wishlist", mappedBy="voucher", orphanRemoval=true)</span>
<span class="sd"> */</span>
<span class="k">protected</span> <span class="nv">$wishlists</span><span class="p">;</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">__construct</span><span class="p">()</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$this</span><span class="o">-></span><span class="na">id</span> <span class="o">==</span> <span class="k">null</span><span class="p">)</span> <span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">id</span> <span class="o">=</span> <span class="nb">base_convert</span><span class="p">(</span><span class="nb">substr</span><span class="p">(</span><span class="nb">uniqid</span><span class="p">(),</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">9</span><span class="p">),</span> <span class="mi">16</span><span class="p">,</span> <span class="mi">36</span><span class="p">);</span>
<span class="p">}</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">persons</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\Doctrine\Common\Collections\ArrayCollection</span><span class="p">();</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">voucherTranslations</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\Doctrine\Common\Collections\ArrayCollection</span><span class="p">();</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">wishlists</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\Doctrine\Common\Collections\ArrayCollection</span><span class="p">();</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Set id</span>
<span class="sd"> *</span>
<span class="sd"> * @param string $id</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">setId</span><span class="p">(</span><span class="nv">$id</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">id</span> <span class="o">==</span> <span class="nv">$id</span><span class="p">;</span>
<span class="k">return</span> <span class="nv">$this</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Get id</span>
<span class="sd"> *</span>
<span class="sd"> * @return string</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getId</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">id</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Set title</span>
<span class="sd"> *</span>
<span class="sd"> * @param string $title</span>
<span class="sd"> * @return Voucher</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">setTitle</span><span class="p">(</span><span class="nv">$title</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">title</span> <span class="o">=</span> <span class="nv">$title</span><span class="p">;</span>
<span class="k">return</span> <span class="nv">$this</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Get title</span>
<span class="sd"> *</span>
<span class="sd"> * @return string</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getTitle</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">title</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Set amount</span>
<span class="sd"> *</span>
<span class="sd"> * @param string $amount</span>
<span class="sd"> * @return Voucher</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">setAmount</span><span class="p">(</span><span class="nv">$amount</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">amount</span> <span class="o">=</span> <span class="nv">$amount</span><span class="p">;</span>
<span class="k">return</span> <span class="nv">$this</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Get amount</span>
<span class="sd"> *</span>
<span class="sd"> * @return string</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getAmount</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">amount</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Set quantity</span>
<span class="sd"> *</span>
<span class="sd"> * @param integer $quantity</span>
<span class="sd"> * @return Voucher</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">setQuantity</span><span class="p">(</span><span class="nv">$quantity</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">quantity</span> <span class="o">=</span> <span class="nv">$quantity</span><span class="p">;</span>
<span class="k">return</span> <span class="nv">$this</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Get quantity</span>
<span class="sd"> *</span>
<span class="sd"> * @return integer</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getQuantity</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">quantity</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Set until</span>
<span class="sd"> *</span>
<span class="sd"> * @param \DateTime $until</span>
<span class="sd"> * @return Voucher</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">setUntil</span><span class="p">(</span><span class="nv">$until</span> <span class="o">=</span> <span class="k">null</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">until</span> <span class="o">=</span> <span class="nv">$until</span><span class="p">;</span>
<span class="k">return</span> <span class="nv">$this</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Get until</span>
<span class="sd"> *</span>
<span class="sd"> * @return \DateTime</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getUntil</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">until</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Add person</span>
<span class="sd"> *</span>
<span class="sd"> * @param \MyWonderfulBundle\Entity\Person $person</span>
<span class="sd"> * @return Voucher</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">addPerson</span><span class="p">(</span><span class="nx">\MyWonderfulBundle\Entity\Person</span> <span class="nv">$person</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">persons</span><span class="o">-></span><span class="na">add</span><span class="p">(</span><span class="nv">$person</span><span class="p">);</span>
<span class="k">return</span> <span class="nv">$this</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Remove person</span>
<span class="sd"> *</span>
<span class="sd"> * @param \MyWonderfulBundle\Entity\Person $person</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">removePerson</span><span class="p">(</span><span class="nx">\MyWonderfulBundle\Entity\Person</span> <span class="nv">$person</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">persons</span><span class="o">-></span><span class="na">removeElement</span><span class="p">(</span><span class="nv">$person</span><span class="p">);</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Add voucherTranslation</span>
<span class="sd"> *</span>
<span class="sd"> * @param \MyWonderfulBundle\Entity\VoucherTranslation $voucherTranslation</span>
<span class="sd"> * @return Voucher</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">addVoucherTranslation</span><span class="p">(</span><span class="nx">\MyWonderfulBundle\Entity\VoucherTranslation</span> <span class="nv">$voucherTranslation</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$voucherTranslation</span><span class="o">-></span><span class="na">setVoucher</span><span class="p">(</span><span class="nv">$this</span><span class="p">);</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">voucherTranslations</span><span class="o">-></span><span class="na">add</span><span class="p">(</span><span class="nv">$voucherTranslation</span><span class="p">);</span>
<span class="k">return</span> <span class="nv">$this</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Remove voucherTranslation</span>
<span class="sd"> *</span>
<span class="sd"> * @param \MyWonderfulBundle\Entity\VoucherTranslation $voucherTranslation</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">removeVoucherTranslation</span><span class="p">(</span><span class="nx">\MyWonderfulBundle\Entity\VoucherTranslation</span> <span class="nv">$voucherTranslation</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">voucherTranslations</span><span class="o">-></span><span class="na">removeElement</span><span class="p">(</span><span class="nv">$voucherTranslation</span><span class="p">);</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Get voucherTranslations</span>
<span class="sd"> *</span>
<span class="sd"> * @return \MyWonderfulBundle\Entity\VoucherTranslation</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getVoucherTranslations</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">voucherTranslations</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Get voucher translation</span>
<span class="sd"> *</span>
<span class="sd"> * @param string $locale</span>
<span class="sd"> * @return \MyWonderfulBundle\Entity\VoucherTranslation</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getTranslation</span><span class="p">(</span><span class="nv">$locale</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">foreach</span> <span class="p">(</span><span class="nv">$this</span><span class="o">-></span><span class="na">voucherTranslations</span> <span class="k">as</span> <span class="o">&</span><span class="nv">$translation</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$translation</span><span class="o">-></span><span class="na">getLanguage</span><span class="p">()</span><span class="o">-></span><span class="na">getCode</span><span class="p">()</span> <span class="o">==</span> <span class="nv">$locale</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="nv">$translation</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Has voucher translation</span>
<span class="sd"> *</span>
<span class="sd"> * @param string $locale</span>
<span class="sd"> * @return boolean</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">hasTranslation</span><span class="p">(</span><span class="nv">$locale</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">foreach</span> <span class="p">(</span><span class="nv">$this</span><span class="o">-></span><span class="na">voucherTranslations</span> <span class="k">as</span> <span class="o">&</span><span class="nv">$translation</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nv">$translation</span><span class="o">-></span><span class="na">getLanguage</span><span class="p">()</span><span class="o">-></span><span class="na">getCode</span><span class="p">()</span> <span class="o">==</span> <span class="nv">$locale</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="k">true</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">return</span> <span class="k">false</span><span class="p">;;</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">checkPersonInCollection</span><span class="p">(</span><span class="nx">\MyWonderfulBundle\Entity\Person</span> <span class="nv">$person</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">persons</span><span class="o">-></span><span class="na">contains</span><span class="p">(</span><span class="nv">$person</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getPersons</span><span class="p">()</span> <span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">persons</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getWishlists</span><span class="p">()</span> <span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">wishlists</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">setWishlists</span><span class="p">(</span><span class="nv">$wishlists</span><span class="p">)</span> <span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">wishlists</span> <span class="o">=</span> <span class="nv">$wishlists</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>
</p>
</div>
<p>Et l'entité enfant :</p>
<div class="spoiler">
<p><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 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</pre></div></td><td class="code"><div class="codehilite"><pre><span class="cp"><?php</span>
<span class="k">namespace</span> <span class="nx">MyWonderfulBundle\Entity</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Doctrine\ORM\Mapping</span> <span class="k">as</span> <span class="nx">ORM</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * VoucherTranslation</span>
<span class="sd"> *</span>
<span class="sd"> * @ORM\Table(name="voucher_translation", indexes={@ORM\Index(name="fk_voucher_has_language_language1_idx", columns={"language_code"}), @ORM\Index(name="fk_voucher_has_language_voucher1_idx", columns={"voucher_id"})})</span>
<span class="sd"> * @ORM\Entity</span>
<span class="sd"> */</span>
<span class="k">class</span> <span class="nc">VoucherTranslation</span>
<span class="p">{</span>
<span class="sd">/**</span>
<span class="sd"> * @var integer</span>
<span class="sd"> *</span>
<span class="sd"> * @ORM\Column(name="id", type="integer", nullable=false)</span>
<span class="sd"> * @ORM\Id</span>
<span class="sd"> * @ORM\GeneratedValue(strategy="IDENTITY")</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="nv">$id</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * @var string</span>
<span class="sd"> * @ORM\Column(name="title", type="string", length=45, nullable=false)</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="nv">$title</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * @var \MyWonderfulBundle\Entity\Voucher</span>
<span class="sd"> *</span>
<span class="sd"> * @ORM\ManyToOne(targetEntity="MyWonderfulBundle\Entity\Voucher", inversedBy="voucherTranslations")</span>
<span class="sd"> * @ORM\JoinColumns({</span>
<span class="sd"> * @ORM\JoinColumn(name="voucher_id", referencedColumnName="id", nullable=false)</span>
<span class="sd"> * })</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="nv">$voucher</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * @var \Language</span>
<span class="sd"> * @ORM\ManyToOne(targetEntity="Language", cascade={"persist"})</span>
<span class="sd"> * @ORM\JoinColumns({</span>
<span class="sd"> * @ORM\JoinColumn(name="language_code", referencedColumnName="code", nullable=false)</span>
<span class="sd"> * })</span>
<span class="sd"> */</span>
<span class="k">private</span> <span class="nv">$language</span><span class="p">;</span>
<span class="sd">/**</span>
<span class="sd"> * Get id</span>
<span class="sd"> *</span>
<span class="sd"> * @return integer</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getId</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">id</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Set title</span>
<span class="sd"> *</span>
<span class="sd"> * @param string $title</span>
<span class="sd"> * @return VoucherTranslation</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">setTitle</span><span class="p">(</span><span class="nv">$title</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">title</span> <span class="o">=</span> <span class="nv">$title</span><span class="p">;</span>
<span class="k">return</span> <span class="nv">$this</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Get title</span>
<span class="sd"> *</span>
<span class="sd"> * @return string</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getTitle</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">title</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Set voucher</span>
<span class="sd"> *</span>
<span class="sd"> * @param \MyWonderfulBundle\Entity\Voucher $voucher</span>
<span class="sd"> * @return VoucherTranslation</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">setVoucher</span><span class="p">(</span><span class="nx">\MyWonderfulBundle\Entity\Voucher</span> <span class="nv">$voucher</span> <span class="o">=</span> <span class="k">null</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">voucher</span> <span class="o">=</span> <span class="nv">$voucher</span><span class="p">;</span>
<span class="k">return</span> <span class="nv">$this</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Get voucher</span>
<span class="sd"> *</span>
<span class="sd"> * @return \MyWonderfulBundle\Entity\Voucher</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getVoucher</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">voucher</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Set language</span>
<span class="sd"> *</span>
<span class="sd"> * @param \MyWonderfulBundle\Entity\Language $language</span>
<span class="sd"> * @return VoucherTranslation</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">setLanguage</span><span class="p">(</span><span class="nx">\MyWonderfulBundle\Entity\Language</span> <span class="nv">$language</span> <span class="o">=</span> <span class="k">null</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$this</span><span class="o">-></span><span class="na">language</span> <span class="o">=</span> <span class="nv">$language</span><span class="p">;</span>
<span class="k">return</span> <span class="nv">$this</span><span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * Get language</span>
<span class="sd"> *</span>
<span class="sd"> * @return \MyWonderfulBundle\Entity\Language</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getLanguage</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">language</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getLocale</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="na">language</span><span class="o">-></span><span class="na">getCode</span><span class="p">();</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>
</p>
</div>