为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 分页返回不同的页面

Laravel 分页返回不同的页面

PHP
holdtom 2021-11-13 19:17:42
我正在处理一个 Laravel 项目,我从 API 获取数据,然后我想在页面上显示它。我希望返回分布在 4 页上,每页有 10 个结果。到目前为止,我所拥有的似乎应该可以工作,但是我缺少一件,因此将不胜感激任何建议和帮助。所以这就是它应该如何处理代码:1) 用户在搜索框中输入书名。<form method=POST action='/search'>        @csrf        <input type="text" name="search_term"/>        <input type="submit" value="Search"/>    </form>2)然后将输入发送到我的控制器,该控制器查询谷歌图书 API。class search extends Controller {public function search(){    $current_page = LengthAwarePaginator::resolveCurrentPage();    echo $current_page;    $term = request('search_term');    $term = str_replace(' ', '_', $term);    $client = new \Google_Client();    $service = new \Google_Service_Books($client);    $params = array('maxResults'=>40);    $results = $service->volumes->listVolumes($term,$params);    $book_collection = collect($results);    $current_book_page = $book_collection->slice(($current_page-1)*10,10)->all();    $books_to_show = new LengthAwarePaginator($current_book_page,count($book_collection),10,$current_page);    return view('library.search')->with(compact('books_to_show'));    }}3)结果然后显示在我的刀片上@extends('home')@section('content')@foreach($books_to_show as $entries)<div class="row">    <div class="col-sm-auto">        <img class="w-50 img-thumbnail" src={{$entries['volumeInfo']['imageLinks']['smallThumbnail']}}/>    </div>    <div class="col-sm">        {{$entries['volumeInfo']['title']}}<br/>        @if($entries['volumeInfo']['authors']!=null)        by:         @foreach($entries['volumeInfo']['authors'] as $authors)            {{$authors}}        @endforeach        @endif    </div></div>@endforeach{{$books_to_show->links()}}@endsection这一切正常,并符合预期。我在视图上得到 10 个结果,然后我在底部有一个栏,它显示了 4 个不同的页面可供选择。当我第一次输入诸如“威廉莎士比亚”之类的搜索词时,我的页面网址是: localhost:8000/search但是,当我点击任何页面时,我的网址变为: http://localhost:8000/?page=2我知道?page=*是分页如何确定您正在查看的页面,并且应该将其发送回控制器。但是,我认为将其发送回控制器时遗漏了一些东西。对此仍然有点新鲜,因此非常感谢任何建议。
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

LengthAwarePaginator 在其构造函数中接受第 5 个参数:选项数组。


该path选项

$books_to_show = new LengthAwarePaginator($current_book_page, count($book_collection), 10, $current_page, [

    // This will fix the path of the pagination links

    'path' => LengthAwarePaginator::resolveCurrentPath()

]);

顺便说一句,在一个完全不同的问题上,Laravel 通过为您切片集合让您的生活更轻松,请查看:


$current_book_page = $book_collection->forPage($current_page, 10);

希望能帮助到你 :)


查看完整回答
反对 回复 2021-11-13
  • 1 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信