Bonjour,

Mon problème est que le render de certaines de mes fonctions utilise le mauvais template.
Au lieu d'utiliser le template indiqué dans le render, il utilise celui de ma page d'accueil.
L'erreur est survenu après que j'ai modifié la route dans la fonction
Je suis en Symfony 5.3

Ce n'est pas le cas pour toutes les fonctions donc je vais mettre ci dessous un controller qui a le problème (PanierController), et un autre qui fonctionne correctement(ContactController), peut-être que des yeux avertis me diront l'erreur que j'ai fait.

Edit : Après avoir fait des test, quand j'appelle des routes qui n'existe pas genre abeillebouvillonne.fr/html ou abeillebouvillonne.fr/porte; au lieu d'avoir une page d'erreur, j'ai le même affichage que le template de la page d'accueil sans les données liées à la fonction home.

PanierController

<?php

namespace App\Controller;

use App\Repository\CategorysRepository;
use App\Repository\ProductsRepository;
use App\Repository\SocieteRepository;
use App\Services\Panier;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class PanierController extends AbstractController
{
    #[Route('/monpanier', name: 'panier')]
    public function panier(Panier $panier, CategorysRepository $categorysRepository, SocieteRepository $societeRepository): Response
    {
        $total = $panier->getTotalPanier();
        $tab = $panier->getDetailPanier();
        $nb = count($panier->getDetailPanier());

        return $this->render('panier/panier.html.twig', [
            'items' => $tab,
            'montant' => $total,
            'categorys' => $categorysRepository->findAll(),
            'count' => $nb,
            'societe' => $societeRepository->find(1),
        ]);
    }
 }

ContactController:

<?php

namespace App\Controller;

use App\Form\ContactType;
use App\Repository\CategorysRepository;
use App\Repository\SocieteRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Mailer\MailerInterface;

class ContactController extends AbstractController
{
    #[Route('/nous-contacter', name: 'contact')]
    public function index(Request $request, MailerInterface $mailer, CategorysRepository $categorysRepository, SocieteRepository $societeRepository)
    {
        $form = $this->createForm(ContactType::class);
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $contactFormData = $form->getData();

            $message = (new Email())
                ->from('abeillebouvillonne@gmail.com')
                ->to('abeillebouvillonne@gmail.com')
                ->subject('vous avez reçu un email')
                ->text(
                    'Sender : ' . $contactFormData['nom'] . '(' . $contactFormData['email'] . ')' . \PHP_EOL .
                        $contactFormData['message'],
                    'text/plain'
                );
            $mailer->send($message);
            $this->addFlash('success', 'Votre message a été envoyé');
            return $this->redirectToRoute('contact');
        }
        return $this->render('contact/index.html.twig', [
            'our_form' => $form->createView(),
            'categorys' => $categorysRepository->findAll(),
            'societe' => $societeRepository->find(1),
        ]);
    }
}

Ce que je veux

Qu emon render utilise le bon template

Ce que j'obtiens

Le render utilise le chemin home/index.html.twig au lieu de celui demandé

Merci par avance

Sixale

7 réponses


Sixale
Auteur
Réponse acceptée

C'est bon, le reboot à 0 m'a permis de voir le problème. il s'agissait de la route de fonction nav_filtre dans mon HomeController, dans laquelle j'avais juste /{cat} .
en rajoutant /recherche devant, ça a corrigé le problème.

Je saurais à l'avenir de ne pas mettre juste un paramètre dans la route.

Merci à ceux ayant répondu.

#[Route('/{cat}', name: 'nav_filtre')]
    public function filtre($cat, ProductsRepository $productRepository, EventsRepository $eventsRepository, CategorysRepository $categorysRepository, SocieteRepository $societeRepository): Response
    {
        $actual_time = new DateTime();
        $actual_time->format('Y-m-d');

        $events = $eventsRepository->findNextEvents($actual_time);
        $three_events = array_slice($events, 0, 3);
        $category = $categorysRepository->findOneBy(['name' => $cat]);
        $product = $productRepository->findBy(['category' => $category]);
        return $this->render('home/home.html.twig', [
            'categorys' => $categorysRepository->findAll(),
            'productsStock' => $productRepository->findStockSup0Cat($category),
            'events' => $three_events,
            'productsOnOrder' => $productRepository->findOnOrderCat($category),
            'societe' => $societeRepository->find(1),
        ]);
    }

Bonjour,

Voici la différence que j'ai constaté :
Tu un fait un "return $this->render('panier/panier.html.twig'" pour le panier,
et tu fais un "return $this->render('contact/index.html.twig" pour le formulaire de conctact.

Peut-être que l'erreur vient de là...

Je ne sais pas si tu est censé pouvoir utiliser pluieurs template qui on le même nom même si ils sont dans des dossiers différents.

Sixale
Auteur

Je ne vois pas de différence, je viens de copier/coller les deux pour m'asssurer mais j'ai bien l'apostrophe à la fin de render du formulaire de contact :
return $this->render('panier/panier.html.twig',
return $this->render('contact/index.html.twig',

Jusqu'à ce que je fasse mes changement dans la route de la function, le fait d'avoir des noms de fichiers identiques ne posait pas de problème, et en plus le fichier panier.html.twig est le seul avec ce nom.

OK...

Est du coup c'est bien le Contact qui ne fonctionne pas ?

Est-ce que tu a quand même essayé de renommer ton fichier 'contact/index.html.twig' en 'contact/contact.html.twig' pour voir si cela règle le problème ?

Sixale
Auteur

Non c'est le Panier qui ne s'affiche pas correctement, désolé je viens de me rendre compte que ce n'est pas explicite dans le message de début je vais corriger ça.
Je vais essayer de changer les nom et voir si ça marche.

Edit : En changeant les noms de mes templates, toujours le problème. A savoir que si je remplace la route "/monpanier" par "/nous-contacter", c'est le template de contact/index.html.twig qui apparait.
Si je devine correctement c'est le routing qui pose problème, mais je ne suis pas assez calé dedans pour aller corrigé le bon fichier sans créé d'autres problèmes.

bonsoir
pensez à vider le cach peut etre ca marchera

Sixale
Auteur

Bonjour,

J'avais déjà essayé mais dans le doute j'ai retenté, ça m'est déjà arrivé qu'une solution ne marche pas la première fois.
Malheureusement même effet.
Entre temps, j'ai fait une copie du projet et recréé le projet sous Symfony 6, et en copiant les fichiers Controllers, Entity, Form, Repository, Services et Templates.
J'ia toujours le problème, donc je vais recréer des fichiers à partir de la console, et si je n'ai plus le problème je vous informerai et cloturerait le sujet.