- Ymox,
Bonjour à tous !
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.
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 'file'
(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 debug:container
, 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.
Est-ce que quelqu'un verrait ce que je loupe depuis hier ?
Merci
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 | <?php namespace YSoft\MediaBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; class MediaType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('type', 'hidden') ->add('path', 'hidden') ->add('name', 'hidden') ->add('file', 'file', array( 'required' => false, 'attr' => array( 'accept' => 'image/*', 'class' => 'filestyle' ) )) ; } /** * @param OptionsResolverInterface $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'YSoft\MediaBundle\Entity\Media' )); } /** * @return string */ public function getName() { return 'ysoft_mediabundle_media'; } } |
YSoft\MediaBundle\Form\MediaType.php
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 | <?php namespace YSoft\MediaBundle\Form\Extension; use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\FormView; use Symfony\Component\Form\FormInterface; class MediaTypeExtension extends AbstractTypeExtension { public function getExtendedType() { return 'ysoft_mediabundle_media'; } public function configureOptions(OptionsResolver $resolver) { $resolver->setOptional(array('image_options')); } public function buildView( FormView $view, FormInterface $form, array $options ) { if (array_key_exists('image_options', $options)) { $view->vars['image_options'] = $options['image_options']; } else { $view->vars['image_options'] = array(); } $view->vars['file'] = &$form->getParent()->getData(); } } |
YSoft\MediaBundle\Form\Extension\MediaTypeExtension.php
1 2 3 4 5 | services: ysoft_media_bundle.media_type_extension: class: YSoft\MediaBundle\Form\Extension\MediaTypeExtension tags: - { name: form.type_extension, alias: ysoft_mediabundle_media } |
Déclaration du service
1 2 3 4 5 6 7 8 9 10 | {% block ysoft_mediabundle_media_widget %} {% spaceless %} {% if file is not null %} {{ file|image(image_options) }} {% endif %} {{ block('form_widget') }} {% endspaceless %} {% endblock %} |
Le bloc Twig redéfini. L'erreur survient parce que file
n'existe pas
Edit
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…