Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2015-06-29T23:08:14+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Extension de formulaire non chargée, message #634262015-06-29T23:08:14+02:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/3497/extension-de-formulaire-non-chargee/?page=1#p63426<p>Je vais glisser la réponse ainsi, ce sera plus simple.</p>
<p>Pour qu'une extension de type formulaire fonctionne, il faut que le type lui aussi soit déclaré comme un service, <em>et utilisé comme tel</em>. Donc <strong>pas</strong> new MediaType() en second argument de FormBuilder::add ni en paramètre du champ de type <code>collection</code> (<code>'type' => new MediaType()</code>).</p>Extension de formulaire non chargée, message #632022015-06-28T12:03:30+02:00Ymox/@Ymoxhttps://zestedesavoir.com/forums/sujet/3497/extension-de-formulaire-non-chargee/?page=1#p63202<p>Bonjour à tous !</p>
<p>Aujourd'hui, j'ai besoin de vos yeux, ça fait deux jours que je bute sur un truc qui m'échappe, et je ne vois pas quoi.</p>
<p>Dans l'idée d'ajouter une prévisualisation de l'image dans mes formulaires Symfony, là où il y a un champ de type <code>'file'</code> (je n'ai que des images à gérer), je suis parti sur l'extension de formulaires. J'ai défini ma classe, ai adapté le code, déclaré le service qui est correctement listé avec <code>debug:container</code>, mais la classe n'est jamais construite. Je n'ai aucune autre erreur que Twig qui me dit qu'une des variables que devrait créer cette extension n'existe pas, ce qui est en soi logique.</p>
<p>Est-ce que quelqu'un verrait ce que je loupe depuis hier ?</p>
<p>Merci <img alt=":)" src="/static/smileys/smile.png"></p>
<div class="spoiler">
<figure><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</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="cp"><?php</span>
<span class="k">namespace</span> <span class="nx">YSoft\MediaBundle\Form</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\Form\AbstractType</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\Form\FormBuilderInterface</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\OptionsResolver\OptionsResolver</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\Form\FormEvent</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\Form\FormEvents</span><span class="p">;</span>
<span class="k">class</span> <span class="nc">MediaType</span> <span class="k">extends</span> <span class="nx">AbstractType</span>
<span class="p">{</span>
<span class="sd">/**</span>
<span class="sd"> * @param FormBuilderInterface $builder</span>
<span class="sd"> * @param array $options</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">buildForm</span><span class="p">(</span><span class="nx">FormBuilderInterface</span> <span class="nv">$builder</span><span class="p">,</span> <span class="k">array</span> <span class="nv">$options</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$builder</span>
<span class="o">-></span><span class="na">add</span><span class="p">(</span><span class="s1">'type'</span><span class="p">,</span> <span class="s1">'hidden'</span><span class="p">)</span>
<span class="o">-></span><span class="na">add</span><span class="p">(</span><span class="s1">'path'</span><span class="p">,</span> <span class="s1">'hidden'</span><span class="p">)</span>
<span class="o">-></span><span class="na">add</span><span class="p">(</span><span class="s1">'name'</span><span class="p">,</span> <span class="s1">'hidden'</span><span class="p">)</span>
<span class="o">-></span><span class="na">add</span><span class="p">(</span><span class="s1">'file'</span><span class="p">,</span> <span class="s1">'file'</span><span class="p">,</span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'required'</span> <span class="o">=></span> <span class="k">false</span><span class="p">,</span>
<span class="s1">'attr'</span> <span class="o">=></span> <span class="k">array</span><span class="p">(</span>
<span class="s1">'accept'</span> <span class="o">=></span> <span class="s1">'image/*'</span><span class="p">,</span>
<span class="s1">'class'</span> <span class="o">=></span> <span class="s1">'filestyle'</span>
<span class="p">)</span>
<span class="p">))</span>
<span class="p">;</span>
<span class="p">}</span>
<span class="sd">/**</span>
<span class="sd"> * @param OptionsResolverInterface $resolver</span>
<span class="sd"> */</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">configureOptions</span><span class="p">(</span><span class="nx">OptionsResolver</span> <span class="nv">$resolver</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$resolver</span><span class="o">-></span><span class="na">setDefaults</span><span class="p">(</span><span class="k">array</span><span class="p">(</span>
<span class="s1">'data_class'</span> <span class="o">=></span> <span class="s1">'YSoft\MediaBundle\Entity\Media'</span>
<span class="p">));</span>
<span class="p">}</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">getName</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="s1">'ysoft_mediabundle_media'</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>
<figcaption><p>YSoft\MediaBundle\Form\MediaType.php</p></figcaption></figure><figure><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</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="cp"><?php</span>
<span class="k">namespace</span> <span class="nx">YSoft\MediaBundle\Form\Extension</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\Form\AbstractTypeExtension</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\OptionsResolver\OptionsResolver</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\Form\FormView</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Symfony\Component\Form\FormInterface</span><span class="p">;</span>
<span class="k">class</span> <span class="nc">MediaTypeExtension</span> <span class="k">extends</span> <span class="nx">AbstractTypeExtension</span>
<span class="p">{</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">getExtendedType</span><span class="p">()</span>
<span class="p">{</span>
<span class="k">return</span> <span class="s1">'ysoft_mediabundle_media'</span><span class="p">;</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">configureOptions</span><span class="p">(</span><span class="nx">OptionsResolver</span> <span class="nv">$resolver</span><span class="p">)</span>
<span class="p">{</span>
<span class="nv">$resolver</span><span class="o">-></span><span class="na">setOptional</span><span class="p">(</span><span class="k">array</span><span class="p">(</span><span class="s1">'image_options'</span><span class="p">));</span>
<span class="p">}</span>
<span class="k">public</span> <span class="k">function</span> <span class="nf">buildView</span><span class="p">(</span>
<span class="nx">FormView</span> <span class="nv">$view</span><span class="p">,</span>
<span class="nx">FormInterface</span> <span class="nv">$form</span><span class="p">,</span>
<span class="k">array</span> <span class="nv">$options</span>
<span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">array_key_exists</span><span class="p">(</span><span class="s1">'image_options'</span><span class="p">,</span> <span class="nv">$options</span><span class="p">))</span> <span class="p">{</span>
<span class="nv">$view</span><span class="o">-></span><span class="na">vars</span><span class="p">[</span><span class="s1">'image_options'</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$options</span><span class="p">[</span><span class="s1">'image_options'</span><span class="p">];</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="nv">$view</span><span class="o">-></span><span class="na">vars</span><span class="p">[</span><span class="s1">'image_options'</span><span class="p">]</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
<span class="p">}</span>
<span class="nv">$view</span><span class="o">-></span><span class="na">vars</span><span class="p">[</span><span class="s1">'file'</span><span class="p">]</span> <span class="o">=</span> <span class="o">&</span><span class="nv">$form</span><span class="o">-></span><span class="na">getParent</span><span class="p">()</span><span class="o">-></span><span class="na">getData</span><span class="p">();</span>
<span class="p">}</span>
<span class="p">}</span>
</pre></div>
</td></tr></table>
<figcaption><p>YSoft\MediaBundle\Form\Extension\MediaTypeExtension.php</p></figcaption></figure><figure><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="l l-Scalar l-Scalar-Plain">services</span><span class="p p-Indicator">:</span>
<span class="l l-Scalar l-Scalar-Plain">ysoft_media_bundle.media_type_extension</span><span class="p p-Indicator">:</span>
<span class="l l-Scalar l-Scalar-Plain">class</span><span class="p p-Indicator">:</span> <span class="l l-Scalar l-Scalar-Plain">YSoft\MediaBundle\Form\Extension\MediaTypeExtension</span>
<span class="l l-Scalar l-Scalar-Plain">tags</span><span class="p p-Indicator">:</span>
<span class="p p-Indicator">-</span> <span class="p p-Indicator">{</span> <span class="nv">name</span><span class="p p-Indicator">:</span> <span class="nv">form.type_extension</span><span class="p p-Indicator">,</span> <span class="nv">alias</span><span class="p p-Indicator">:</span> <span class="nv">ysoft_mediabundle_media</span> <span class="p p-Indicator">}</span>
</pre></div>
</td></tr></table>
<figcaption><p>Déclaration du service</p></figcaption></figure><figure><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="cp">{%</span> <span class="k">block</span> <span class="nv">ysoft_mediabundle_media_widget</span> <span class="cp">%}</span>
<span class="cp">{%</span> <span class="k">spaceless</span> <span class="cp">%}</span>
<span class="cp">{%</span> <span class="k">if</span> <span class="nv">file</span> <span class="k">is</span> <span class="k">not</span> <span class="nf">null</span> <span class="cp">%}</span>
<span class="cp">{{</span> <span class="nv">file</span><span class="o">|</span><span class="nf">image</span><span class="o">(</span><span class="nv">image_options</span><span class="o">)</span> <span class="cp">}}</span>
<span class="cp">{%</span> <span class="k">endif</span> <span class="cp">%}</span>
<span class="cp">{{</span> <span class="nb">block</span><span class="o">(</span><span class="s1">'form_widget'</span><span class="o">)</span> <span class="cp">}}</span>
<span class="cp">{%</span> <span class="k">endspaceless</span> <span class="cp">%}</span>
<span class="cp">{%</span> <span class="k">endblock</span> <span class="cp">%}</span>
</pre></div>
</td></tr></table>
<figcaption><p>Le bloc Twig redéfini. L'erreur survient parce que <code>file</code> n'existe pas</p></figcaption></figure></div>
<h4>Edit</h4>
<p>En fait, je remarque que l'alias devrait normalement apparaître listé aussi, mais ce n'est étrangement pas le cas. Peut-être que justement c'est là le souci…</p>