Laravel: Paginate JSON Response - PullRequest
0 голосов
/ 03 мая 2018

Я получаю данные json из Google Fonts и отображаю их на своем сайте. Я пытаюсь использовать lagvel paginator для разбивки на эти данные, потому что когда я отображаю их в целом, это сказывается на производительности, но я не нашел, как это сделать. еще.

это мой контроллер

public function googleFonts()
{     
$url = "https://www.googleapis.com/webfonts/v1/webfonts?key={ my key here}";
 $r = collect(json_decode(file_get_contents( $url ),true));
return view ('googleFonts',compact('result'))->render();
}

и это на моем блейд-файле

 @foreach($result->items as $font)

        <tr>
          <td>{{$font->family }}</td>
          <td <p style="font-family: '{{$font->family}}',serif;font-size: 22px">Lorem ipsum</p></td>
          <td>{{implode(', ', $font->variants) }}</td>
          <td>{{$font->category }}</td>
          <td>{{implode(', ', $font->subsets) }}</td>
          <td>{{$font->version }}</td>
        </tr>
       @endforeach

когда я возвращаю данные без нумерации страниц, все работает, но когда я пытаюсь разбить на страницы, независимо от того, что я пробую, все ломается. Любые идеи будут очень ценны

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете разбить данные на страницы вручную, используя коллекцию или собственный массив, создав экземпляр этого класса Illuminate\Pagination\LengthAwarePaginator.

// Set default page
$page = request()->has('page') ? request('page') : 1;

// Set default per page
$perPage = request()->has('per_page') ? request('per_page') : 15;

// Offset required to take the results
$offset = ($page * $perPage) - $perPage;

// At here you might transform your data into collection
$url = "https://www.googleapis.com/webfonts/v1/webfonts?key={ my key here}";
$newCollection = collect(json_decode(file_get_contents( $url ),true));

// Set custom pagination to result set
$results =  new LengthAwarePaginator(
     $newCollection->slice($offset, $perPage),
     $newCollection->count(),
     $perPage,
     $page,
     ['path' => request()->url(), 'query' => request()->query()]
);

return view('googleFonts',compact('results'));
...