Objectifs
- À la fin du tutoriel, les développeurs seront capables de :
- Créer un formulaire de recherche Symfony.
- Configurer l'entité et le Repository associé
- Intégrer la logique de recherche dans le contrôleur Symfony
- Afficher les résultats de recherche dans une vue Twig
- Gérer la pagination des résultats de recherche (facultatif)
- Styliser et tester le formulaire de recherche
-
Étape 1: Création d'un formulaire Symfony
- Vous pouvez créer un formulaire Symfony en utilisant la console Symfony ou en le définissant manuellement dans votre contrôleur.
- Dans l'exemple suivant j'ai ajoué un formulaire a ma twig module/index.html.twig:
<div class="card-header"> <div class="row justify-content-between"> <div class="col-sm-auto"> <a class="btn btn-outline-primary" href="{{ path('app_module_new') }}"> <i class="fas fa-plus"></i> <!-- Icône pour créer un nouveau module --> </a> </div> <div class="col-sm-auto"> <form class="d-flex" role="search" id="searchForm"> <div class="form-group"> <input type="text" class="form-control me-2" placeholder="Recherche..." name="search" id="searchInput"> </div> <button type="submit" class="btn btn-outline-secondary ml-2"> <i class="fas fa-search"></i> <!-- Icône de recherche --> </button> </form> </div> </div> </div> Étape 2: Utilisez la logique de recherche dans votre contrôleur Symfony
- Utilisez les données de recherche soumises par le formulaire pour effectuer une recherche dans votre application et récupérer les résultats correspondants.
- Voici un exemple de code pour créer un formulaire de recherche Symfony dans votre contrôleur :
public function index(Request $request, ModuleRepository $moduleRepository, PaginatorInterface $paginator): Response { // Récupérer le terme de recherche depuis la requête $searchTerm = $request->query->get('search'); // Récupérez la page actuelle à partir de la requête $currentPage = $request->query->getInt('page', 1); // Nombre d'éléments par page $itemsPerPage = 6; // Créez une requête Doctrine pour récupérer les modules $queryBuilder = $moduleRepository->createQueryBuilder('m') ->orderBy('m.id', 'ASC'); // Ajoutez une condition de recherche si un terme de recherche est spécifié if ($searchTerm) { $queryBuilder ->andWhere('m.libelle LIKE :searchTerm OR m.duree LIKE :searchTerm') ->setParameter('searchTerm', '%'.$searchTerm.'%'); } // Paginez les résultats $pagination = $paginator->paginate( $queryBuilder, $currentPage, $itemsPerPage ); return $this->render('module/index.html.twig', [ 'pagination' => $pagination, ]); }
- À la fin du tutoriel, les développeurs seront capables de :