<?php
namespace App\Controller;
use App\Entity\Routes;
use App\Form\RoutesType;
use App\Repository\RoutesRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\SluggerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Entity\Fichiers;
/**
* @Route("/routes")
*/
class RoutesController extends AbstractController
{
/**
* @Route("/", name="routes_index", methods={"GET"})
*/
public function index(RoutesRepository $routesRepository): Response
{
return $this->render('routes/index.html.twig', [
'routes' => $routesRepository->findAll(),
]);
}
/**
* @Route("/new", name="routes_new", methods={"GET","POST"})
*/
public function new(Request $request, SluggerInterface $slugger): Response {
$route = new Routes();
$form = $this->createForm(RoutesType::class, $route);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// On récupère les fichiers transmises
$fichiers = $form->get('fichiers')->getData();
// On boucle sur les fichiers
foreach ($fichiers as $fichier) {
// On génère un nouveau nom de fichier
$originalFilename = pathinfo($fichier->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $fichier->guessExtension();
// var_dump($fichier);
// On copie le fichier dans le dossier uploads
try {
$fichier->move(
$this->getParameter('fichiers_directory'),
$newFilename
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
// On crée l'fichier dans la base de données
$fich = new Fichiers();
$fich->setNom($newFilename);
$fich->setRnom($safeFilename);
$route->addFichier($fich);
}
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($route);
$entityManager->flush();
return $this->redirectToRoute('routes_index');
}
return $this->renderForm('routes/new.html.twig', [
'route' => $route,
'form' => $form,
]);
}
/**
* @Route("/{id}", name="routes_show", methods={"GET"})
*/
public function show(Routes $route): Response {
return $this->render('routes/show.html.twig', [
'route' => $route,
]);
}
/**
* @Route("/{id}/edit", name="routes_edit", methods={"GET","POST"})
*/
public function edit(Request $request, Routes $route, SluggerInterface $slugger): Response {
$form = $this->createForm(RoutesType::class, $route);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$fichiers = $form->get('fichiers')->getData();
// On boucle sur les fichiers
foreach ($fichiers as $fichier) {
// On génère un nouveau nom de fichier
$originalFilename = pathinfo($fichier->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $fichier->guessExtension();
// var_dump($fichier);
// On copie le fichier dans le dossier uploads
try {
$fichier->move(
$this->getParameter('fichiers_directory'),
$newFilename
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
// On crée l'fichier dans la base de données
$fich = new Fichiers();
$fich->setNom($newFilename);
$fich->setRnom($safeFilename);
$route->addFichier($fich);
}
$this->getDoctrine()->getManager()->flush();
return $this->redirectToRoute('routes_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('routes/edit.html.twig', [
'route' => $route,
'form' => $form,
]);
}
/**
* @Route("/{id}", name="routes_delete", methods={"POST"})
*/
public function delete(Request $request, Routes $route): Response {
if ($this->isCsrfTokenValid('delete' . $route->getId(), $request->request->get('_token'))) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($route);
$entityManager->flush();
}
return $this->redirectToRoute('routes_index', [], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/delete/fichier/{id}", name="routes_delete_fichier", methods={"DELETE"}, requirements={"id":"\d+"})
*/
public function deleteImage(Fichiers $fichier, Request $request) {
$data = json_decode($request->getContent(), true);
// On vérifie si le token est valide
if ($this->isCsrfTokenValid('delete' . $fichier->getId(), $data['_token'])) {
// On récupère le nom de l'image
$nom = $fichier->getNom();
// On supprime le fichier
unlink($this->getParameter('fichiers_directory') . '/' . $nom);
// On supprime l'entrée de la base
$em = $this->getDoctrine()->getManager();
$em->remove($fichier);
$em->flush();
// On répond en json
return new JsonResponse(['success' => 1]);
} else {
return new JsonResponse(['error' => 'Token Invalide'], 400);
}
}
}