7976 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai crée un site de création de facture c'est-à-dire tous les utilisateurs doivent être connectés pour pouvoir créer et télécharger leurs factures.
Ce que je veux c'est de permettre aux visiteurs de pouvoir créer et télécharger les factures sans se connecter et leurs factures ne serons pas sauvegarder.
Voici ce que j'essaie de faire au niveau du controller :

<?php


namespace App\Controller;


use App\Entity\Facture;
use App\Form\FactureType;
use Spipu\Html2Pdf\Html2Pdf;
use App\Service\T_HTML2PDF;
use App\Repository\FactureRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;


/**
 * @Route("/facture")
 */
class FactureController extends AbstractController
{


//-----------------------------------------------
/**
     * @Route("/guest_new", name="guest_facture_new", methods={"GET","POST"})
     */
    public function guestnew(Request $request): Response
    {
        $facture = new Facture();
        //$facture->setUser($this->getUser());


        $form = $this->createForm(FactureType::class, $facture);
        $form->handleRequest($request);


        if ($form->isSubmitted() && $form->isValid()) {


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


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


merci
Bonjour,

où est-ce que tu bloques exactement?
Tu as déjà fait cette partie?
CVFlashJob a écrit :
J'ai crée un site de création de facture c'est-à-dire tous les utilisateurs doivent être connectés pour pouvoir créer et télécharger leurs factures.
Oui j'ai déjà cette partie.
En fait j'ai crée un site avec symfony 4.2 sur lequel les utilisateurs peuvent créer, voir et télécharger leurs factures. Mais chaque utilisateurs doit être connecté pour créer des facture et ça marche bien. Ce que je veux maintenant c'est que les utilisateurs invités(non connecté) puisse aussi créer des factures et les télécharger et leurs factures n'est pas enregistrées en base.
Voici le controller pour la création et le téléchargement des factures pour les utilisateurs connectés:

<?php
 
 
namespace App\Controller;
 
 
use App\Entity\Facture;
use App\Form\FactureType;
use Spipu\Html2Pdf\Html2Pdf;
use App\Service\T_HTML2PDF;
use App\Repository\FactureRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
 
 
/**
 * @Route("/facture")
 */
class FactureController extends AbstractController
{
    /**
     * @Route("/", name="facture_index", methods={"GET"})
     */
    public function index(FactureRepository $factureRepository): Response
    {
        $userFactures = $factureRepository->findBy(['user' => $this->getUser()]);
 
 
        return $this->render('facture/index.html.twig', [
            'factures' => $userFactures,
        ]);
    }
 
 
    /**
     * @Route("/new", name="facture_new", methods={"GET","POST"})
     */
    public function new(Request $request): Response
    {
        $facture = new Facture();
        $facture->setUser($this->getUser());
 
 
        $form = $this->createForm(FactureType::class, $facture);
        $form->handleRequest($request);
 
 
        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($facture);
            $entityManager->flush();
 
 
            return $this->redirectToRoute('facture_index');
        }
 
 
        return $this->render('facture/new.html.twig', [
            'facture' => $facture,
            'form' => $form->createView(),
        ]);
    }
 
 
 
 
 
    /**
     * @Route("/{id}", name="facture_show", methods={"GET"})
     */
    public function show(Facture $facture): Response
    {
        return $this->render('facture/show.html.twig', [
            'facture' => $facture,
        ]);
    }
 
 
    /**
     * @Route("/{id}/edit", name="facture_edit", methods={"GET","POST"})
     */
    public function edit(Request $request, Facture $facture): Response
    {
        $form = $this->createForm(FactureType::class, $facture);
        $form->handleRequest($request);
 
 
        if ($form->isSubmitted() && $form->isValid()) {
            $this->getDoctrine()->getManager()->flush();
 
 
            return $this->redirectToRoute('facture_index', [
                'id' => $facture->getId(),
            ]);
        }
 
 
        return $this->render('facture/edit.html.twig', [
            'facture' => $facture,
            'form' => $form->createView(),
        ]);
    }
 
 
    /**
     * @Route("/{id}", name="facture_delete", methods={"DELETE"})
     */
    public function delete(Request $request, Facture $facture): Response
    {
        if ($this->isCsrfTokenValid('delete'.$facture->getId(), $request->request->get('_token'))) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->remove($facture);
            $entityManager->flush();
        }
 
 
        return $this->redirectToRoute('facture_index');
    }
 
 
    /**
   * @Route("facture_pdf/{id}", name="facture_pdf", methods={"GET"})
     */
    public function showPdf(Facture $facture): Response
    {
        $template = $this->render('facture/pdf.html.twig', [
            'facture' => $facture,
        ]);
 
 
      $html2pdf = new T_Html2Pdf('P', 'A4', 'fr', true, 'UTF-8', array(10, 15, 10, 15));
      $html2pdf->create('P', 'A4', 'fr', true, 'UTF-8', array(10, 15, 10, 15));
 
 
      return $html2pdf->generatePdf($template, "facture");
    }
 
 
}
Bonjour,
Je suppose que tout ce qui est dans /facture/... est accessible que pour ceux qui sont connectés ?
Tu peux faire un service dans lequel tu met le contenu de ta fonction new dedans.
Ensuite tu fais un second contrôleur accessible sans authentification et tu rappelles ton service pour éviter de dupliquer ton code.
Donc pour résumer ça fait (par exemple):
- un service Facture avec une fonction newFacture
- un contrôleur pour les utilisateurs authentifiés avec une fonction new appelant la fonction newFacture du service Facture
- un contrôleur pour les utilisateurs non authentifiés avec une fonction new appelant la fonction newFacture du service Facture
Modifié par Raphi (06 Jun 2019 - 09:56)