我正在处理一个 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=*是分页如何确定您正在查看的页面,并且应该将其发送回控制器。但是,我认为将其发送回控制器时遗漏了一些东西。
对此仍然有点新鲜,因此非常感谢任何建议。
互换的青春