Création d’un formulaire de recherche avec Symfony
Comment faire une pagination avec Symfony 7 ?
-
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:
-
É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 :
<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>
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,
]);
}