Browse Source

fix query call pagination

master
art.dambrine 4 years ago
parent
commit
bf399ea514
  1. 1
      public/js/customButton.js
  2. 5
      src/Controller/PokemonController.php
  3. 3
      src/Entity/Pokemon.php
  4. 19
      src/Repository/PokemonRepository.php
  5. 6
      templates/pokemon/index.html.twig

1
public/js/customButton.js

@ -1,4 +1,5 @@
let myButton = document.getElementById("refreshPokemonListBtn")
myButton.addEventListener("click", (event)=>{
event.preventDefault()
window.location = "/pokemon"
})

5
src/Controller/PokemonController.php

@ -23,15 +23,14 @@ class PokemonController extends AbstractController
{
// Si l'utilisateur saisit un mot clé
if ($pokemonSearchTerm = $request->query->get('keyword')) {
$qr = $pokemonRepository->findPokemonsWithSearchTerm($pokemonSearchTerm);
$qr = $pokemonRepository->findPokemonsWithSearchTermQuery($pokemonSearchTerm);
} else {
// Sinon on affichera tout les pokemons
$qr = $pokemonRepository->findAll();
$qr = $pokemonRepository->findAllPokemonQuery();
}
// Paginate the results of the query
$pokemons = $paginator->paginate(
// TODO: poser la question à Simon (performances moindres avec passage du result ?)
$qr, /*query NOT result*/
$request->query->getInt('page', 1), /*page number*/
15 /*Items per page*/

3
src/Entity/Pokemon.php

@ -6,6 +6,8 @@ use App\Repository\PokemonRepository;
use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Core\Annotation\ApiResource;
use Symfony\Component\Serializer\Annotation\Groups;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
/**
* @ORM\Entity(repositoryClass=PokemonRepository::class)
@ -14,6 +16,7 @@ use Symfony\Component\Serializer\Annotation\Groups;
* "groups"={"pokemon_read"}
* }
* )
* @ApiFilter(SearchFilter::class, properties={"nom": "partial"})
*/
class Pokemon
{

19
src/Repository/PokemonRepository.php

@ -4,6 +4,7 @@ namespace App\Repository;
use App\Entity\Pokemon;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\Query;
use Doctrine\Persistence\ManagerRegistry;
/**
@ -19,12 +20,23 @@ class PokemonRepository extends ServiceEntityRepository
parent::__construct($registry, Pokemon::class);
}
/**
* @return Query
*/
public function findAllPokemonQuery(): Query
{
return $this->createQueryBuilder('p')
->orderBy('p.numero', 'ASC')
->getQuery();
}
/**
* @param $params
* @return Pokemon[] Returns an array of Pokemon objects
* @return Query
*/
public function findPokemonsWithSearchTerm($searchTerm): array
public function findPokemonsWithSearchTermQuery($searchTerm): Query
{
return $this->createQueryBuilder('p')
->andWhere('p.nom LIKE :searchTerm
@ -34,8 +46,7 @@ class PokemonRepository extends ServiceEntityRepository
->leftJoin('p.generation', 'gen')
->setParameter('searchTerm', '%' . $searchTerm . '%')
->orderBy('p.numero', 'ASC')
->getQuery()
->getResult();
->getQuery();
}

6
templates/pokemon/index.html.twig

@ -3,6 +3,7 @@
{% block title %}Pokemon index{% endblock %}
{% block stylesheets %}
<link rel="stylesheet" href="{{ asset('css/bootstrap.min.css') }}">
<style>
@ -18,7 +19,7 @@
<form action="/pokemon" method="get">
<div class="row">
<div class="col-md-7">
<input type="text" class="form-control" id="exampleInputkeywordSearch1" name="keyword" aria-describedby="keywordSearchHelp" placeholder="Saisir un nom de pokemon, type, generation...">
<input type="text" class="form-control" name="keyword" placeholder="Saisir un nom de pokemon, type, generation...">
</div>
<div class="col-auto">
<button class="btn btn-primary">Rechercher <i class="fas fa-search"></i></button>
@ -76,6 +77,7 @@
{{ knp_pagination_render(pokemon) }}
</div>
<srcipt type="text/javascript" src="{{ asset('js/customButton.js') }}"></srcipt>
<script src={{ asset('js/customButton.js') }}></script>
{% endblock %}

Loading…
Cancel
Save