Bonjour à tous,
je suis novice en programmation, et j'essaye de créer mon blog. Le problème ? je galère avec la barre de recherche... Je voulais essayer de faire un truc simple, sans passer par elastic search, mais juste avec le query builder de symfony.
Du coup j'ai créer une fonction dans le repository des articles :
Et dans le controller je fait appel à cette méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public function search($title) { return $this->createQueryBuilder('Article') ->andWhere('Article.title LIKE :title') ->setParameter('title', '%'.$title.'%') ->getQuery() ->execute(); }
Pour ensuite rediriger vers une page avec les articles correspondants. Il ne se passe rien dans la vue pour l'instant ( search.html.twig ) car je n'ai pas travaillé cette partie la.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 /** * @Route("/", name="home") */ public function home(ArticleRepository $repo, PaginatorInterface $paginator, Request $request, AuthenticationUtils $authenticationUtils) { $searchForm = $this->createForm(SearchType::class); $searchForm->handleRequest($request); if ($searchForm->isSubmitted() && $searchForm->isValid()) { $title = $searchForm->getData()->getTitle(); $donnees = $repo->search($title); return $this->redirectToRoute('search'); } $donnees = $this->getDoctrine()->getRepository(Article::class)->findBy([],['id' => 'desc']); // Paginate the results of the query $articles = $paginator->paginate( // Doctrine Query, not results $donnees, // Define the page parameter $request->query->getInt('page', 1), // Items per page 4 ); // get the login error if there is one $error = $authenticationUtils->getLastAuthenticationError(); // last username entered by the user $lastUsername = $authenticationUtils->getLastUsername(); return $this->render('biblio/home.html.twig', [ 'articles' => $articles, 'last_username' => $lastUsername, 'error' => $error, 'searchForm' => $searchForm->createView() ]); }
A ce niveau je me demande, avec cette méthode, est ce que si un utilisateur recherche un mot, mais pas un titre d'article complet, il y aura un retour ou pas ? ( si il faut taper un titre d'article à la lettre près sa manque d'interet ) si oui comment gérer sa avec le query builder ? ( la fonction doit pas être complète )
Deuxio, comment faire pour envoyer les articles ainsi récupérés sur search.html.twig depuis home.html.twig ? Il faut créer une classe carrément ? ou il y a plus simple ?
J'espère que j'ai été clair dans ma demande, et vous remercie d'avance pour vos réponses.
Partager