Développement moteur de recherche avec le quey builder de symfony 4

Ce sujet est résolu
Default
,

Bonjour,

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 :

public function search($title) {
       return $this->createQueryBuilder('Article')
           ->andWhere('Article.title LIKE :title')
           ->setParameter('title', '%'.$title.'%')
           ->getQuery()
           ->execute();
   }

Et dans le controller je fait appel à cette méthode :

/**
     * @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()
        ]);
    }

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.

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.

1 Réponse

Default
,

j'ai finalement réussit à créer une barre de recherche toute simple, qui recherche un ou des mots clés dans le titre des articles. J'ai juste lié le formulaire à l'entité, et fait appel à la méthode du repository dans le controller pour enfin passer le résultat à knp_paginator.