Skip to content
Advertisement

Symfony knp_paginator query with $_GET

I am a beginner and I try to write a query for a search input using kpn_paginator but I get an error:

One of listeners must count and slice given target

I can not find the solution, I checked some other topic but cannot understand how to do it in my code.

My else work well but my if not.

When I try to change my query (->getOneOrNullResult) by (->getResult) I get this error:

Return value of AppRepositoryArticleRepository::findByName() must be an instance of AppEntityArticle or null, array returned

If you can help me thank you very much.

index.html.twig

<div class="search">
 <form action="" method="get" >
  <input type="text" name="recherche" placeholder="Titre">
  <button type="submit" class="btn btn-primary btn-sm">Recherche</button>
  </form>
</div>

Controller.php

/**
     * @Route("/", name="admin_article_index", methods={"GET"})
     */
    public function index(ArticleRepository $articleRepository, PaginatorInterface $paginator, Request $request): Response
    {
        $this->articleRepository = $articleRepository;
        
       $recherche = [];
        
        if (isset($_GET['recherche'])) {
            $recherche = htmlspecialchars($_GET['recherche']);
            
           
            $article = $paginator->paginate(
                $this->articleRepository->findByName($recherche),
                $request->query->getInt('page', 1),
                2
            );
        }else {
            $article = $paginator->paginate(
                $this->articleRepository->findAllArticleQuery(),
                $request->query->getInt('page', 1),
                2
            );
        }
        return $this->render('admin/article/index.html.twig', [
            'articles' => $article,
            
            
        ]);
    }

ArticleRepository.php

public function findByName($recherche): ?Article
    {
        return $this->createQueryBuilder('a')
            ->andWhere('a.title = :val')
            ->setParameter('val', $recherche)
            ->getQuery()
            ->getOneOrNullResult()
        ;
    }

Advertisement

Answer

Must to add join:

/**
 * @return Query
 */
public function findVilleArticleQuery($search)
{
    $query = $this->findArticleQuery();

    if ($search = $_GET["villesearch"]){
        $query = $query
        ->join('a.localiser', 'l')
        ->where('l.town LIKE :ville')
        ->setParameter('ville', '%' . $search . '%' )
        ;
    }

    return $query->getQuery();
}
private function findArticleQuery()
{
    return $this->createQueryBuilder('a')
    ->orderby('a.created_at','DESC');
    
}
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement