8768 sujets

Développement web côté serveur, CMS

Bonjour à tous, j’ai créé une fonction recherche fullt text dans mon HomeController.

J’essaye d'envoyer une variable globale à twig pour pouvoir l'avoir sur toutes mes pages (formulaire de recherche pour avoir la barre de recherche dans la navbar dans toutes mes pages).

Je ne comprends pas comment faire la liaison entre mon controller qui contient ma fonction "rechercher" et la variable global dans mon twig.yaml. (sur symfony 5).



Merci pour vos retour, ou même une piste pour me pencher dessus ????


ps:

mon HomeController:

<?php

namespace App\Controller;

use App\Entity\Categories;
use App\Form\SearchArticleType;
use App\Repository\ArticlesRepository;
use App\Repository\CategoriesRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\SearchType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Extra\Intl\IntlExtension;

class HomeController extends AbstractController
{
    /**
     * @Route("/", name="home")
     * @param ArticlesRepository $articlesRepo
     * @param CategoriesRepository $categoriesRepo
     * @param Request $request
     * @return Response
     */
    public function index(ArticlesRepository $articlesRepo, CategoriesRepository $categoriesRepo, Request $request): Response
    {

        $articles = $articlesRepo->findBy(
            ['active' => true],
            ['created_at' => 'desc'],
            7);

        $articleHeader = $articlesRepo->findBy(
            ['featured' => true],
            ['featured_position' => 'asc']
            );

        $form = $this->createForm(SearchArticleType::class);

        $search = $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid()){
            // Recherche des articles coorespondants aux mots-clés
            $articles = $articlesRepo->search($search->get('mots')->getData());
        }

        return $this->render('home/index.html.twig', [
            'articleHeader' => $articleHeader,
            'articles' => $articles,
            'controller_name' => 'HomeController',
            'form' => $form->createView()
        ]);
    }

    /**
     * @Route("/distributeurs", name="distributeurs")
     */
    public function maplocator()
    {
        return $this->render('home/distributeurs.html.twig', [

        ]);
    }


    /**
     * @Route("/rechercher", name="rechercher")
     */
    public function search(ArticlesRepository $articlesRepo, CategoriesRepository $categoriesRepo, Request $request): Response
    {
        $articles = $articlesRepo->findBy(
            ['active' => true],
            ['created_at' => 'desc']
            );

        $form = $this->createForm(SearchArticleType::class);

        $search = $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid()){
            // Recherche des articles coorespondants aux mots-clés
            $articles = $articlesRepo->search($search->get('mots')->getData());
        }

        return $this->render('home/rechercher.html.twig', [
            'articles' => $articles,
            'form' => $form->createView()
        ]);
    }


    /**
     * @Route("/categorie/{slug}", name="categories")
     * @param Categories $categories
     * @param ArticlesRepository $articlesRepo
     * @return Response
     */
    public function showArticlesCategories1(Categories $categories,  ArticlesRepository $articlesRepo): Response
    {
        return $this->render('categories/index.html.twig', [
            'articlesCategories' => $articlesRepo->findBy(
                ['categories' => $categories],
                ['created_at' => 'desc']),

            // Boucle pour les categories META'S
            'articlesCategoriesMeta' => $articlesRepo->findBy(
                ['categories' => $categories],
                ['created_at' => 'desc'], 1 ),

            // Boucle pour les categories META'S
            'categorieActuelle' => $articlesRepo->findBy(
                ['categories' => $categories],
                ['created_at' => 'desc'], 1 ),

        ]);
    }

}



Et mon twig.yaml:

twig:
default_path: '%kernel.project_dir%/templates'
form_themes: ['bootstrap_4_layout.html.twig']
globals:
global_var: 'Working !'

-> En gros recuprer ma variable à la place de la variable 'global_var'
Modifié par louyi (21 Jun 2021 - 12:18)
salut,
si tu cherches encore, pour faire une form de recherche dans la navbar, il faut faire un service qui retourne la vue de ton form ($form->createView()) si pas utilisé et ta page de résultat si utilisé
ex
class SearchFormService extends AbstractController
{
public function getSearchForm()
{
$form = $this->createForm(SearchType::class);
return $form->createView();
}
}

et dans twig extension

new TwigFunction('getSearchForm', [$this->searchFormService, 'getSearchForm']),
et dans ta navbar
{% set searchForm = getSearchForm() %}