*Bonjour,

Merci à tous d'abord de prendre le temps de lire mon petit message :)

Informations

J'installe KNG_Paginator_Bundle ( aucun soucis )
*En symfony, je crée une pagination en Json avec la librairie Knp_paginator bundle installer avec composer sur packagist.
Je l'installe sans soucis, je le met en place et parfait, ma pagination fonctionne.

Réponse en Json avec Postman ou autre ( aucun soucis)
*Je retoune mes items (phones) paginer 10 par pages avec l'url suivante "local/api/phones?page=1"

Dans mon controller ( juste pour montrer que ça fonctionne pareil)

*C'est finalement la même utilisation qu'avec Twig dans un rendu html

$kngPagination = $this->kngPaginator->paginate(
            $listItem,
            $request->query->getInt('page', 1),
            $numItemsPerPage
        );

*Sauf que je ne donne pas mon résultat à twig mais retourne une réponse json après sérialisation.

Problème

*Le KNG paginator bundle en json, ajoute des mappings que je ne souhaite pas afficher.

*Je reçois donc ma réponse suivante :

{
    "current_page_number": 1,
    "num_items_per_page": 8,
    "items": [
        {
            "id": 101,
            "name": "Phone 1",
            "_links": {
                "self": {
                    "href": "https://127.0.0.1:8000/api/phones/101"
                }
            }
        },
        {
            "id": 102,
            "name": "Phone 2",
            "_links": {
                "self": {
                    "href": "https://127.0.0.1:8000/api/phones/102"
                }
            }
        },
        {
            "id": 103,
            "name": "Phone 3",
            "_links": {
                "self": {
                    "href": "https://127.0.0.1:8000/api/phones/103"
                }
            }
        },
        {
            "id": 104,
            "name": "Phone 4",
            "_links": {
                "self": {
                    "href": "https://127.0.0.1:8000/api/phones/104"
                }
            }
        },
        {
            "id": 105,
            "name": "Phone 5",
            "_links": {
                "self": {
                    "href": "https://127.0.0.1:8000/api/phones/105"
                }
            }
        },
        {
            "id": 106,
            "name": "Phone 6",
            "_links": {
                "self": {
                    "href": "https://127.0.0.1:8000/api/phones/106"
                }
            }
        },
        {
            "id": 107,
            "name": "Phone 7",
            "_links": {
                "self": {
                    "href": "https://127.0.0.1:8000/api/phones/107"
                }
            }
        },
        {
            "id": 108,
            "name": "Phone 8",
            "_links": {
                "self": {
                    "href": "https://127.0.0.1:8000/api/phones/108"
                }
            }
        }
    ],
    "total_count": 25,
    "paginator_options": {
        "pageParameterName": "page",
        "sortFieldParameterName": "sort",
        "sortDirectionParameterName": "direction",
        "filterFieldParameterName": "filterField",
        "filterValueParameterName": "filterValue",
        "distinct": true,
        "pageOutOfRange": "ignore",
        "defaultLimit": 10
    },
    "custom_parameters": [],
    "route": "phones",
    "params": [],
    "page_range": 5,
    "template": "@KnpPaginator/Pagination/twitter_bootstrap_v4_pagination.html.twig",
    "sortable_template": "@KnpPaginator/Pagination/sortable_link.html.twig",
    "filtration_template": "@KnpPaginator/Pagination/filtration.html.twig"
}

Ce que je veux

Je souhaite tout simplement retirer le mapping à partir de -> "paginator options" soit supprimer tout cela de ma réponse :

paginator_options": {
        "pageParameterName": "page",
        "sortFieldParameterName": "sort",
        "sortDirectionParameterName": "direction",
        "filterFieldParameterName": "filterField",
        "filterValueParameterName": "filterValue",
        "distinct": true,
        "pageOutOfRange": "ignore",
        "defaultLimit": 10
    },
    "custom_parameters": [],
    "route": "phones",
    "params": [],
    "page_range": 5,
    "template": "@KnpPaginator/Pagination/twitter_bootstrap_v4_pagination.html.twig",
    "sortable_template": "@KnpPaginator/Pagination/sortable_link.html.twig",
    "filtration_template": "@KnpPaginator/Pagination/filtration.html.twig"

Déjà essayé

1)
*J'ai déjà tenté d'utiliser la pagination de kng pour crée ma pagination moi-même à travers des functions fournis par kng_paginator
ex :
$kngPagination->getCurrentPageNumber(); ( récupère la page acutelle)
$kngPagination->getItems(); ( récupère mes items)

*sauf que cela me crée des problèmes et un peu beaucoup de code, pas très efficace.

2)
*Les solutions sur google date de config.yml et malheureusement cela ne fonctionen pas pour moi.

*Merci d'avance si quelqu'un à une idée pour enlevé ces paramètres directement depuis le config dans " App\config\packagist" finalement, une solution simple, peut-être bête mais je buche totalement depuis 3 jours.

Merci à tous ^^
Même des propositions je suis ouvert, si pas de solution merci quand meme.
Bonne soirée

5 réponses


Merci de formater le code pour qu'on puisse le lire convenablement le code cf https://www.markdownguide.org/basic-syntax/#code.

Bonjour, voilà, merci d'avance.

Merci, je pense qu'il faudrait trouver le normalizer qui agit lorsqu'un objet de type Pagination est reçu (tu peux trouver ça via xdebug ou via une recherche sur le nom de la classe). Et une solution serait de créer ton propre normalizer qui traite l'objet avant le reste.

J'aurai souhaité traité cela directement depuis le fichier " knp_paginator.yaml " finalement.
Cela se faisait directement et c'était plus simple, sinon oui, c'est ce que je devrais faire. Merci

Donc voilà, si juste quelqu'un à déjà été confronté à ce petit problème sinon merci à toi grafikart d'avoir pris le temps de me répondre.