Je travaille avec laravel api resource. Par défaut, laravel fournit des liens et des méta comme indiqué ci-dessous.
"links": {
"first": "https://demo.test/api/v2/taxes?page=1",
"last": "https://demo.test/api/v2/taxes?page=4",
"prev": null,
"next": "https://demo.test/api/v2/taxes?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 4,
"path": "https://demo.test/api/v2/taxes",
"per_page": 2,
"to": 2,
"total": 8
}
Mais je ne veux pas cela, insted je veux quelque chose comme
"pagination": {
"total": 8,
"count": 8,
"per_page": 25,
"current_page": 1,
"total_pages": 1
}
Je peux obtenir cette information, mais si je fais return TaxResource::collection($taxes);
, je ne l’aurai pas Même j'ai une méthode de collecte personnalisée
public static function collection($resource)
{
$resource->pagination = [
'total' => $resource->total(),
'count' => $resource->count(),
'per_page' => $resource->perPage(),
'current_page' => $resource->currentPage(),
'total_pages' => $resource->lastPage()
];
return parent::collection($resource);
}
Ce n'est pas donner ce que je veux. Mais si je fais référence à (TaxResource::collection($taxes))->pagination;
, je pourrai l'obtenir. Mais je veux que ce soit retourné quand je fais return TaxResource::collection($taxes);
La réponse acceptée ne fonctionnait pas pour moi (dans Laravel 5.6), mais j'ai trouvé un meilleur moyen, à mon humble avis.
Enregistrez les informations de pagination dans votre constructeur ResourceCollection et remplacez la ressource Paginator par la collection sous-jacente.
TaxCollection.php:
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class TaxCollection extends ResourceCollection
{
private $pagination;
public function __construct($resource)
{
$this->pagination = [
'total' => $resource->total(),
'count' => $resource->count(),
'per_page' => $resource->perPage(),
'current_page' => $resource->currentPage(),
'total_pages' => $resource->lastPage()
];
$resource = $resource->getCollection();
parent::__construct($resource);
}
public function toArray($request)
{
return [
'data' => $this->collection,
'pagination' => $this->pagination
];
}
}
vous pouvez également étendre JsonResource, AnonymousResourceCollection, ResourceCollection et enfin PaginatedResourceResponse
@ yrv16 Laravel version 5.6:
public function withResponse($request, $response)
{
$jsonResponse = json_decode($response->getContent(), true);
unset($jsonResponse['links'],$jsonResponse['meta']);
$response->setContent(json_encode($jsonResponse));
}