Slut cher tous!

Je solicite votre aide parce bloque, en effet je travail sur la creation des api et tout fonctionnent sans probleme juste au niveau de la methode PUT ki devrai me permettre de modifier un fichier ,apres avoir generer le CRUD , je voudrais savoirs apres avoir recupere le fichier a modifier kesk'on ecrie (dans le code) par la suite pour pouvoir modifier le fichier en kestion ??? ter mon code
je rappel ke dans postman je devrai tester mon code avec le <<Content-Type=>form-data>> car il contient un fichier(file) a exporter , en plus de cela mon code ne contient pas de formulaire(FORM)

Voici mon code:
"
namespace App\Controller;

use App\Entity\Fichier;
use App\Form\FichierType;
use Gedmo\Sluggable\Util\Urlizer;
use App\Repository\FichierRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\UtilisateurRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class FichierController extends AbstractController
{
.........//
.........//
.........//
/**

  • @Route("/api/fichiers/show/{id}", name="fichier_show", methods={"GET"})
    */
    public function show($id, Request $request): Response
    {
    $fichier = $this->getDoctrine()->getRepository(Fichier::class)->find($id);
    if (!$fichier) {
    throw $this->createNotFoundException(
    'Aucun fichier trouvé pour cet id : '.$id
    );
    }
    return $this->json($fichier, 200);
    }

    /**

  • @Route("/api/fichiers/edit/{id}", name="fichier_edit", methods={"GET","PUT"})
    */
    public function edit($id, Request $request): Response
    {
    $fichier = $this->getDoctrine()->getRepository(Fichier::class)->find($id);
    if (!$fichier) {
    throw $this->createNotFoundException(
    'Aucun fichier trouvé pour cet id : '.$id
    );
    }

    // $entityManager = $this->createForm(FichierType::class, $form);
    // $entityManager->handleRequest($request);
    
    // if ($form->isSubmitted() && $form->isValid()) {
        // $this->getDoctrine()->getManager()->flush();
    
    //     return $this->redirectToRoute('fichier_index', [], Response::HTTP_SEE_OTHER);
    // }
    
    return $this->json($fichier);

    }"

Ce que je veux

Je voudrais modifier les donnees d'un fichier apres l'avoir affiche

Ce que j'obtiens

Je reussis juste a l'afficher sans pouvoir le modifier

Merci d'avance pour vos reactions ki me permettrons d'avancer!!!

3 réponses


Bonjour, je me demande si tu as déjà trouvé la réponse, car j’aimerais le tester aussi.

Magboy
Auteur

Slut oui deja

Magboy
Auteur

Voici mon code complet :
"<?php

namespace App\Controller;

use App\Entity\Fichier;
use App\Form\FichierType;
use Gedmo\Sluggable\Util\Urlizer;
use App\Repository\FichierRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\UtilisateurRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class FichierController extends AbstractController
{
/**

  • @Route("/api/fichiers/new", name="fichier_new", methods={"POST"})
    */
    public function new(Request $request, UtilisateurRepository $utilisateurRepo, EntityManagerInterface $entityManager): Response
    {
    $id = $request->get('id');

    $utilisateur = $utilisateurRepo->findById(['id'=>$id]);

    // dd($utilisateur);
    /* @var UploadedFile $file /
    $file = $request->files->get('lien');
    $originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
    $newFile = Urlizer::urlize($originalFilename).'-'.uniqid().'.'.$file->guessExtension();
    $destination = $this->getParameter('kernel.project_dir').'/public/files';

    $dest = '/files/';
    $file->move($destination, $newFile);
    $fichier = new Fichier();
    $fichier->setNom($request->get('nom'))
            ->setDescription($request->get('description'))
            ->setLien($dest.$newFile)
            ->setUtilisateur($utilisateur[0])
    
    $entityManager = $this->getDoctrine()->getManager();
    $entityManager->persist($fichier);
    $entityManager->flush();
    
    // dd($fichier);
    return $this->json([['Fichier cree avec success'], $fichier], 201);

    }

    /**

  • @Route("/api/fichiers/show", name="fichier_index", methods={"GET"})
    */
    public function index(FichierRepository $fichierRepository): Response
    {

    return $this->json($fichierRepository->findAll(), 200);

    }

    /**

  • @Route("/api/fichiers/show/{id}", name="fichier_show", methods={"GET"})
    */
    public function show($id, Request $request): Response
    {
    $fichier = $this->getDoctrine()->getRepository(Fichier::class)->find($id);
    if (!$fichier) {
    throw $this->createNotFoundException(
    'Aucun fichier trouvé pour cet id : '.$id
    );
    }
    return $this->json($fichier, 200);
    }

    /**

  • @Route("/api/fichiers/edit/{id}", name="fichier_edit", methods={"POST","PUT"})
    */
    public function edit(?Fichier $fichier, Request $request, UtilisateurRepository $utilisateurRepo, $id): Response
    {
    $fichier = $this->getDoctrine()->getRepository(Fichier::class)->find($id);
    if (!$fichier) {
    throw $this->createNotFoundException(
    'Aucun fichier trouvé pour cet id : '.$id
    );
    }else{
    $id = $request->get('id');

        $utilisateur = $utilisateurRepo->findById(['id'=>$id]);
    
        /** @var UploadedFile $file */
        $file = $request->files->get('lien');
        $originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
        $newFile = Urlizer::urlize($originalFilename).'-'.uniqid().'.'.$file->guessExtension();
        $destination = $this->getParameter('kernel.project_dir').'/public/files';
    
        $dest = '/files/';
        $file->move($destination, $newFile);
        // $fichier = new Fichier();
        $fichier->setNom($request->get('nom'))
                ->setDescription($request->get('description'))
                ->setLien($dest.$newFile)
                // ->setUtilisateur($utilisateur[0])
    
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($fichier);
        $entityManager->flush();
        }
    
    return $this->json([['Fichier modifie avec success'], $fichier]);

    }

    /**

  • @Route("/api/fichiers/del/{id}", name="fichier_delete", methods={"GET", "DELETE"})
    */
    public function delete($id): Response
    {
    $fichier = $this->getDoctrine()->getRepository(Fichier::class)->find($id);
    if (!$fichier) {
    throw $this->createNotFoundException(
    'Aucun fichier trouvé pour cet id : '.$id
    );
    }
    // if ($this->isCsrfTokenValid('delete'.$fichier->getId(), $request->request->get('_token'))) {
    $entityManager = $this->getDoctrine()->getManager();
    $entityManager->remove($fichier);
    $entityManager->flush();
    // }

    return $this->json(['Fichier supprime avec success'], Response::HTTP_SEE_OTHER);    }

    }
    "
    Mon soucis actuelement c'est de pouvoir supprimer un fichier dans l'app sans toutefois toucher a la base de donnee, si jamais t'as une solution je suis preneur!