Affichage Image fichier edit (symfony5)

Signaler
Messages postés
43
Date d'inscription
mardi 2 février 2021
Statut
Membre
Dernière intervention
14 juin 2021
-
hello! je suis coincee depuis plusieurs jours pour arriver à afficher une ou plusieurs images dans mon fichier ! j'arrive pas :(
mon controller (l'ajout d'une fonction pour supprimer en bas du fichier e j'ai commenté)
<?php

/**
 * @Route("/trick")
 */
class TrickController extends AbstractController
{
    /**
     * @Route("/", name="trick_index", methods={"GET"})
     */
    public function index(TrickRepository $trickRepository): Response
    {
        return $this->render('trick/index.html.twig', [
            'tricks' => $trickRepository->findAll(),
        ]);
    }

    /**
     * @Route("/new", name="trick_new", methods={"GET","POST"})
     */
    public function new(Request $request): Response
    {
        $trick = new Trick();
        $trick->setUser($this->getUser());
        $form = $this->createForm(TrickType::class, $trick);
        $form->handleRequest($request);
    
        if ($form->isSubmitted() && $form->isValid()) {
           
            // recuperation des images transmises
            $pictures = $form->get('picture')->getData();

            // faire une boucle pour plusieurs images
            foreach ($pictures as $picture) {
            //  generer un nouveau nom de fichier images
                $fichier = md5(uniqid()) . '.' . $picture->guessExtension();
            
                // recopier le fichier dans le upload
                $picture->move(
                    $this->getParameter('pictures_directory'),
                    $fichier
                );
            
                // stocker l image dans la db avec son nom
                $img = new Picture();
               // $img->setTricks($trick);  je suis  pas sur que ce soit vraiment  utile! commenté
                $img->setName($fichier);
                $trick->addPicture($img);
            }

            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($trick);
            $entityManager->flush();

            return $this->redirectToRoute('trick_index');
        }

        return $this->render('trick/new.html.twig', [
            'trick' => $trick,
            'form' => $form->createView(),
        ]); }
   
    /**
     * @Route("/{id}", name="trick_show", methods={"GET"})
     */
    public function show(Trick $trick): Response
    {
        return $this->render('trick/show.html.twig', [
            'trick' => $trick,
        ]) }

    /**
     * @Route("/{id}/edit", name="trick_edit", methods={"GET","POST"})
     */
    public function edit(Request $request, Trick $trick): Response
    {
        $form = $this->createForm(TrickType::class, $trick);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $pictures = $form->get('picture')->getData();

            // faire une boucle pour plusieurs images
            foreach ($pictures as $picture) {
            //  generer un nouveau nom de fichier images
                $fichier = md5(uniqid()) . '.' . $picture->guessExtension();
            
                // recopier le fichier dans le upload
                $picture->move(
                    $this->getParameter('pictures_directory'),
                    $fichier
                );
            
                // stocker l image dans la db avec son nom
                $img = new Picture();
               $img->setTricks($trick);
                $img->setName($fichier);
                $trick->addPicture($img);        
       
        }   
            $this->getDoctrine()->getManager()->flush();

            return $this->redirectToRoute('trick_index');
        }

        return $this->render('trick/edit.html.twig', [
            'trick' => $trick,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/{id}", name="trick_delete", methods={"POST"})
     */
    public function delete(Request $request, Trick $trick): Response
    {
        if ($this->isCsrfTokenValid('delete'.$trick->getId(), $request->request->get('_token'))) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->remove($trick);
            $entityManager->flush();
        }

        return $this->redirectToRoute('trick_index');
    }
    /**
     * @Route("/delete/picture/{id}", name="trick_delete_picture", methods={"DELETE"})
     */
    public function deletePicture(Trick $picture, Request $request){
        $data = json_decode($request->getContent(), true);

        //verification du token  valid ou pas
        if ($this->isCsrfTokenValid('delete'. $picture->getId(), $data['_token'])){
            //je recupere le nom de l image
            $nom = $picture->getName();
            // puis on supprme l image avec le nom
            unlink($this->getParameter('pictures_directory') .'/'. $nom);

        // suppression de la db
            $em = $this->getDoctrine()->getManager();

            $em->remove($picture);
            $em->flush();

            //reponse en json_decode
            return new JsonResponse(['success'=> 1]);
        }else{
            return new JsonResponse(['error'=> 'Token Invalide'], 400);
        }}}


mon fichier edit.html.twig :
{% extends 'base.html.twig' %}

{% block title %}Edit Trick
{% endblock %}
 
{% block body %}
 <div class="container ">
  <div class="text-center " style="padding-bottom:10px">
   <h1>Modifier un trick</h1>
  </div>
  <div class="row justify-content-around">
   {{ include('trick/_form.html.twig',  {'button_label': 'Save'}) }}
   {{ include('trick/_delete_form.html.twig') }}
   <a href="{{ path('trick_index') }}" class="btn btn-secondary">back to list</a>
  </div>
 </div>
{% endblock %}
{% block javascript %}
<script src="{{ asset('js/images.js') }}"></script>
{% endblock %}


et mon formulaire :
{{ form_start(form) }}

<div class="container h-100">
 <div class="row align-items-center h-100">
  <div class="col-12" id="edit-trick">
   {{ form_start(form) }}
   {{ form_row(form.name, {label: 'Nom du Trick'}) }}<br>
   {{ form_row(form.description) }}<br>
   {{ form_row(form.createdAt, {label: 'Crée le:'}) }}<br>
   {{ form_row(form.updateAt, {label: 'Modifié le:'}) }}<br>
   {{ form_row(form.category, {label: 'Catégories:'}) }}<br>
   {{ form_row(form.picture, {label: 'Images'}) }}<br>
  </div>
 </div>

{% if app.request.attributes.get('_route') == 'trick_edit' %}
 <h2>images</h2>
 {% for picture in trick.picture %}
  <div>
   <img src="{{ asset('/uploads/' ~ picture.name )}}" alt="Picture" width="150">
   <a href=" {{ path('trick_delete_picture', {id: picture.id}) }}" data-delete data-token=" {{ csrf_token('delete'~ picture.id) }} ">Supprimer</a>
  </div>
 {% endfor %}
{% endif %} 
 {{ form_end(form) }}
 <button class="btn btn-primary">{{ button_label|default('Save') }}</button>
</div>


en bref mes images ne saffichent pas dans mon fichier edit donc pas non plus dans mon show!
je voudrais pouvoir voir s' AFFICHER mes images que j'ai mises dans un dossier dans public , uploads ,pictures
franchement si vous pourviez m'aider!!!! merci bcp
je trouve pas ca fait plusieurs jours que je tente en vain !
pas douée ok :( soyez indulgent je debute symfony et twig)

en plus si ca peut aider car je pense que c'est un point important : dans ma DB dans ma colonne trick_id j'ai Null au lieu d'avoir l'ID du trick de l'image !