Bonjour à tout.e.s
Après avoir suivi la formation de GrafiArt sur l'agence imo j'ai mis une pagination en place dans un nouveau petit projet.
La pagination fonctionne parfaitement mais le tri pas du tout, rien ne se passe lorsque je clique sur le lien même si la requête passe bien dans l'URL. Dois-je faire quelque chose au niveau du contrôleur ?
Merci par avance

Le contrôleur

    /**
     * @Route("/", name="eleve_index", methods={"GET","POST"})
     */
    public function index(PaginatorInterface $paginator, EleveRepository $eleveRepository, Request $request): Response
    {
        $searchEleves = new EleveSearch();
        $form = $this->createForm(EleveSearchType::class, $searchEleves);
        $form->handleRequest($request);

        $eleves = $paginator->paginate(
            $eleveRepository->findAllByAscendant(),
            $request->query->getInt('page', 1),
            8
        );

        return $this->render('eleve/index.html.twig', [
            'current_menu' => 'eleve',
            'eleves' => $eleves,
            'form' => $form->createView()
        ]);
    }

La vue index

{% extends 'base.html.twig' %}

{% block title %}Liste des élèves{% endblock %}

{% block body %}
<div class="container mt-3">
  <h1>Liste des élèves</h1>
  <table class="table table-hover">
    <thead>
    <tr>
      <th>Prenom</th>
      <th>{{ knp_pagination_sortable(eleves, 'Nom', 'e.Nom') }}</th>
      <th>{{ knp_pagination_sortable(eleves, 'Classe', 'e.classe') }}</th>
      <th>{{ knp_pagination_sortable(eleves, 'Dispositif', 'e.dispositif') }}</th>
      <th>{{ knp_pagination_sortable(eleves, 'Pathologie', 'e.pathologie') }}</th>
      {% if is_granted('ROLE_ADMIN') %}
      <th>{{ knp_pagination_sortable(eleves, 'Info', 'e.info') }}</th>
      {% endif %}
      <th>{{ knp_pagination_sortable(eleves, 'AESH', 'e.aesh') }}</th>
      <th>actions</th>
    </tr>
    </thead>
    <tbody>
    {% for eleve in eleves %}
      <tr>
        <td>{{ eleve.prenom }}</td>
        <td>{{ eleve.nom }}</td>
        <td>{{ eleve.classe }}</td>
        <td>{{ eleve.dispositif }}</td>
        <td>{{ eleve.pathologie }}</td>
        {% if is_granted('ROLE_ADMIN') %}
        <td>{{ eleve.info }}</td>
        {% endif %}
        <td>{{ eleve.aesh }}</td>
        <td>
          <a href="{{ path('eleve_show', {'id': eleve.id}) }}" class="badge badge-secondary mt-1">Détail</a>
          {% if is_granted('ROLE_ADMIN') %}
          <a href="{{ path('eleve_edit', {'id': eleve.id}) }}" class="badge badge-warning mt-1">Modif</a>
          <form method="post" action="{{ path('eleve_delete', {'id': eleve.id}) }}" style="display: inline-block" onsubmit="return confirm('Confirmez-vous la suppression de {{ eleve.nom }} ?');">
            <input type="hidden" name="_token" value="{{ csrf_token('delete' ~ eleve.id) }}">
            <button class="badge badge-danger mt-1">Suppr</button>
          </form>
          {% endif %}
        </td>
      </tr>
    {% else %}
      <tr>
        <td colspan="4">Pas d'enregistrement</td>
      </tr>
    {% endfor %}
    </tbody>
  </table>
  <div class="pagination">
    {{ knp_pagination_render(eleves) }}
  </div>
  {% if is_granted('ROLE_ADMIN') %}
  <a href="{{ path('eleve_new') }}" class="btn btn-success mt-1">Ajouter un(e) élève</a>
  {% endif %}
</div>
{% endblock %}

Ce que je veux

Je voudrais que Nom, Classe, etc soit rangés par nom ascendant ou descendant selon l'état précédent.

Ce que j'obtiens

Une requête dans l'URL http://127.0.0.1:8000/eleve/?sort=e.Nom&direction=asc&page=1
mais pas de changement dans la vue.

2 réponses


bidule
Réponse acceptée

hello,

ici enleve le "e.Nom" et ne met que la valeur que tu as dans ton Entity

    <th>{{ knp_pagination_sortable(eleves, 'Nom', 'Nom') }}</th>
     <th>{{ knp_pagination_sortable(eleves, 'Classe', 'classe') }}</th>
   <th>{{ knp_pagination_sortable(eleves, 'Dispositif', 'dispositif') }}</th>
    <th>{{ knp_pagination_sortable(eleves, 'Pathologie', 'pathologie') }}</th>
Antton
Auteur

Et ça marche encore :), un grand MERCI.
J'avoue cependant ne pas comprendre pourquoi cela marche comme sur l'exemle sur Github. Dans un autre projet sur SF 4.1 cela fonctionne bien avec cette écriture :

        <th>{{ knp_pagination_sortable(properties, 'Entreprise', 'p.title') }}</th>
        <th>{{ knp_pagination_sortable(properties, 'Ville', 'p.city') }}</th>