Arasma's avatar

Customizing The Pagination Information doesn't work for Resource::collection()

Hello, I am trying to customize pagination information for a resource collection. According to the 10.x docs

If you would like to customize the information included in the links or meta keys of the pagination response, you may define a paginationInformation method on the resource

I am returning my resource collection like so return CampaignIndexResource::collection($results->paginate()); Am I missing something? Does it only work for dedicated Collections?

Thanks for resposne.

0 likes
5 replies
vincent15000's avatar

Can you show the entire method including its definition inside the resource please ?

Arasma's avatar

@vincent15000

use Illuminate\Http\Resources\Json\JsonResource;

class CampaignIndexResource extends JsonResource
{
    public function paginationInformation($request, $paginated, $default)
    {
        $default['meta']['custom'] = 'https://example.com';

        return $default;
    }

    public function toArray(Request $request)
    {
        return ['id' => '123'];
    }
}

And the controller

    public function index(Request $request) {
        $results = Campaign::with('team');
        return CampaignIndexResource::collection($results->paginate());
    }
1 like
vincent15000's avatar

@BrMk Never done and never tested, but you should try to create a collection and define the custom pagination informations inside the collection instead of inside the resource.

class CampaignIndexCollection extends ResourceCollection
{
    public function toArray($request)
    {
        return parent::toArray($request);
    }
    public function paginationInformation($request, $paginated, $default)
    {
        $default['meta']['custom'] = 'https://example.com';

        return $default;
    }
}
bytedevzone's avatar

Use macro in App service provider

	/**
     * Register any application services.
     */
    public function register(): void
    {
        JsonResource::macro('paginationInformation', function($request, $paginated, $default){
         
            return $default;
        });
    }
1 like
Merklin's avatar

This is the way:

public function index(Request $request) {
        $results = Campaign::with('team')->paginate();
		return CampaignIndexResource::collection($results);
    }

or just return Campaign::with('team')->paginate(); if possible

1 like

Please or to participate in this conversation.