<?php
namespace App\Controller;
use App\Entity\Projet;
use App\Form\ProjetType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\SluggerInterface;
class ProjetController extends AbstractController
{
public function __construct(EntityManagerInterface $manager)
{
$this->manager = $manager;
}
/**
* @Route("/projet", name="app_projet")
*/
public function index(Request $request, SluggerInterface $sluger): Response
{
// Creation de l'instance Projet
$projet = new Projet();
// Création du formulaire à partir d'une classe issu du fichier ProjetType.php
$formProjet = $this->createForm(ProjetType::class, $projet);
// Traitement du formulaire
$formProjet->handleRequest($request);
// Si le formulaire est soumis et validé , alors...
if ($formProjet->isSubmitted() && $formProjet->isValid()) {
// On recupere dans une variable $photoProjet le contenu de l'image stocké
$photoProjet = $formProjet->get('lien')->getData();
if ($photoProjet) {
$originalFilename = pathinfo($photoProjet->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $sluger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $photoProjet->guessExtension();
try {
$photoProjet->move(
$this->getParameter('lien'),
$newFilename
);
} catch (FileException $e) {
}
$projet->setLien($newFilename);
} else {
dd('Aucune photo de projet disponible');
}
// $projet->setPublication(new \datetime);
// $projet->setAuteur($this->getUser()->getNomComplet());
// On persiste le projet
$this->manager->persist($projet);
// On le flush
$this->manager->flush();
}
return $this->render('projet/index.html.twig', [
// Matérialise l'affichage du formulaire
'myProject' => $formProjet->createView(),
]);
}
/**
* @Route("/projet/delete/{id}", name="app_projet_delete")
*/
public function projetDelete(Projet $projet, Request $request): Response
{
// On efface le projet
$this->manager->remove($projet);
// On flush
$this->manager->flush();
return $this->redirectToRoute('app_home');
}
/* ------------------ Modifier le projet ---------------- */
/**
* @Route("/projet/edit/{id}", name="app_projet_edit")
*/
public function projetEdit(Projet $projetModif, SluggerInterface $slugger, Request $request): Response
{
$projetFormModif = $this->createForm(ProjetType::class, $projetModif);
// Traitement du formulaire
$projetFormModif->handleRequest($request);
// Si le formulaire est soumis et validé , alors...
if ($projetFormModif->isSubmitted() && $projetFormModif->isValid()) {
// On recupere dans une variable $photoProjet le contenu de l'image stocké
$photoProjet = $projetFormModif->get('lien')->getData();
if ($photoProjet) {
$originalFilename = pathinfo($photoProjet->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $photoProjet->guessExtension();
try {
$photoProjet->move(
$this->getParameter('lien'),
$newFilename
);
} catch (FileException $e) {
}
$projetModif->setLien($newFilename);
} else {
dd('Aucune photo de projet disponible');
}
//$contactModif->setPublication(new \datetime);
// On persiste le projet modifié
$this->manager->persist($projetModif);
// On le flush
$this->manager->flush();
// On redirige ensuite à la page qui liste les projets
return $this->redirectToRoute('app_all_projets');
}
return $this->render('projet/editProjet.html.twig', [
// Matérialise l'affichage du formulaire
'myEditProjet' => $projetFormModif->createView(),
]);
}
/*------------------ Lister tous les projets ---------------------*/
/**
* @Route("/all/projets", name="app_all_projets")
*/
public function allProjets(): Response
{
$projets = $this->manager->getRepository(Projet::class)->findAll();
// Verifier que la variable a bien recu les données cherchés dans la BDD
// dd($projets);
return $this->render('projet/allProjets.html.twig', [
// Matérialise l'affichage du formulaire
'projets' => $projets,
]);
}
/**
* @Route("/single/projet/{id}", name="app_view_projet")
*/
public function singleProjet(Projet $projet): Response
{
return $this->render('projet/singleProjet.html.twig', [
'projet' => $projet,
]);
}
}