Bonjour,
Je souhaite pouvoir afficher le chemin et la photo d'un article quand j'édite ce dernier. Je me suis donc inspiré de la doc symfony "Form Type Extension" https://symfony.com/doc/3.4/form/create_form_type_extension.html
J'ai un form ArticlesType (lié a l'entité article) qui utilise la classe MediaType::class pour definir le formulaire Mediatype.php specifique aux photos
//dans ArticlesType.php
->add('image', MediaType::class)
//dans Mediatype.php
->add('image', FileType::class, array('data_class' => null,
'required' => false,
'label' => 'Illustration de l\'article',
'image_property' => 'AssetPath')
image_property' => 'AssetPath' me permet de "lier" mon formulaire media à ImageTypeExtension où je fais un buildView afin de retrouver l'URL des photos
public function buildView(FormView $view, FormInterface $form, array $options)
{
// this will be whatever class/entity is bound to the form (e.g. Media)
$parentData = $form->getParent()->getData();
$imageUrl = null;
if (null !== $parentData) {
$accessor = PropertyAccess::createPropertyAccessor();
$imageUrl = $accessor->getValue($parentData, 'AssetPath');
//dump($imageUrl);
die(var_dump($imageUrl));
}
// sets an "image_url" variable that will be available when rendering this field
$view->vars['image_url'] = $imageUrl;
$imageUrl renvoie bien l'URL, mais du fait de l'imbrication de Mediatype dans ArticlesType, $view->vars['image_url'] n'envoie pas cette variable à la vue.
dans la vue,
{% if image_url is not null %}
<img src="{{ asset(image_url) }}"/>
{% endif %}
renvoie une erreur puisque twig ne trouve pas image_url.
Comment faire passer $imageUrl à la vue ?
Hello,
Tu y es presque :D
Tout est dans la doc à cet endroit.
Il faut que tu créer un form_theme personnaliser pour ton champs.
Dans ta vue twig actuelle hors des blocks et tout en haut tu ajoutes une ligne de ce genre :
`{% form_theme form _self %}
{% block file_widget %}
{% spaceless %}
{{ block('form_widget') }}
{% if image_url is not null %}
<img src="{{ asset(image_url) }}"/>
{% endif %}
{% endspaceless %}
{% endblock %}`
Et maintenant cela devrait afficher l'image ;)
Merci beaucoup.
J'ai bien retrouvé dans la doc ce que tu me dis : https://symfony.com/doc/3.4/form/form_themes.html...
Par contre, ca ne marche pas pour moi. Si j'écris en debut de vue :
{% extends '::layout/layoutAdmin.html.twig' %} {% form_theme form _self %}
Symfony me repond < Variable "form" does not exist. >
Pour le coup, dans ton controller, tu affectes bien une variable à la vue comme ceci : 'form' => $form->createView() ? (Je pars du principe que tu as instancié ton formulaire)
{% form_theme form _self %} form étant le nom de ton formulaire
Juste pour info, dans la doc Symfony, il est préconnisé d'utiliser le bundle tiers VichUploaderBundle (https://symfony.com/doc/current/controller/upload_file.html) qui propose les fonctionnalités dont tu as besoin...
Merci Digivia. J'ai bien ce Bundle en effet.
Elyanor... bon, ca avance : grace à {% form_theme edit_form _self %} en debut de vue (je n'avais absolument pas compri ce qu'ils voulaient dire dans la cod), j'obtiens bien les variables de l'image... (je les visualise avec un {{ dump() }} ).
Par contre, je n'arrive pas a exploiter la variable :
{% block file_widget %}
{% spaceless %}
{{ block('form_widget') }}
`<img src="{{ asset(image_url) }}"/>`
{% endspaceless %}
{% endblock %}
me renvoi une erreur twig : Variable "image_url" does not exist.