嘿伙计们在Laravel 5中使用分页时遇到问题。我希望对搜索结果进行分页,我的代码可以工作并显示与我的搜索匹配的内容,但是当我想看时其他结果(页面= 2)它没有显示任何内容,我得到路由异常。
MethodNotAllowedHttpException in RouteCollection.php line 207:
分页只适用于GET操作吗?
我会提供一些帮助。
这是我目前的代码
SearchController.php
/* Bring the form */
public function index()
{
$levels = Level::all();
return view('search.seek')->with('levels',$levels);
}
/**
* Display results that matches my search
* @param Request $request
* @return Response
*/
public function results(Request $request)
{
$suggestions = Suggestion::where('subject','=',$request->subject,'and')
->where('level','=',$request->level,'and')
->where('grade','=',$request->grade,'and')
->where('topic','=',$request->topic,'and')
->where('device','=',$request->device)->latest()->paginate(5);
$suggestions->setPath('results');
return view('search.list')->with('suggestions', $suggestions);
}
Route.php
Route::post('results',[
'as' => 'results_path',
'uses' => 'SearchController@results' ]);
list.blade.php
@if($suggestions != null)
<h1 class="page-heading">Resultados</h1>
@foreach($suggestions->chunk(5) as $Suggestions)
<div class="row">
<div class="col-lg-12">
@foreach($Suggestions as $suggestion)
<div id="postlist">
<div class="panel">
<div class="panel-heading">
<div class="text-center">
<div class="row">
<div class="col-sm-9">
<h3 class="pull-left">{!! \App\Topic::find($suggestion->topic)->name !!}</h3>
</div>
<div class="col-sm-3">
<h4 class="pull-right">
<small><em>{!! $suggestion->created_at->format('Y-m-d') !!}</em></small>
</h4>
</div>
</div>
</div>
</div>
<div class="panel-body">{!! $suggestion->how_to_use !!}</div>
<div class="panel-footer"><span class="label label-default">Por: {!! \App\User::find($suggestion->user_id)->name !!}</span><span class="label label-success pull-right">{!! link_to('results/' .$suggestion->id ,'Ver',null) !!}</span></div>
</div>
</div>
@endforeach
</div>
</div>
@endforeach
{!! $suggestions->render() !!}
@endif
答案 0 :(得分:11)
是分页仅适用于get参数。
您应该在搜索页面使用GET
方法。 POST
次请求并非用于显示数据。为什么?原因有很多,但简而言之,我会给你两个例子:
使用GET
参数,让我们假设您在第六页 - 您可以复制链接并将其粘贴给朋友,他将能够查看与您相同的内容。使用POST
这是不可能的。
如果您设法让分页工作,则无法对POST
个请求使用后退按钮。
POST
请求非常有用,以便创建新记录。
因此,我建议您将路线类型更改为GET
,将搜索表单方式更改为GET
。
答案 1 :(得分:3)
真的可以使用POST方法使用表单。分页链接是GET请求,但这是自动的,您可以使用多种方法放置路由定义,并且功能将是自动的。
你的route.php之类的东西应该有效。
Route::match(['get', 'post'], 'results',[
'as' => 'results_path',
'uses' => 'SearchController@results' ]);
答案 2 :(得分:1)
DB::table($table)->paginate($perPage,['*'],'page',$page);
在帖子
中使用它的gonaa作品答案 3 :(得分:0)
解决方案是使用JS或jquery从控制器返回视图中的所有数据。