Issue
I have an issue when using pagination in Laravel 5. This is the case I want to paginate results that I get from a search, my code works and displays the content that matches my search, but when I want to see the others results (page = 2) it doesn't display anything and I get a route exception.
MethodNotAllowedHttpException in RouteCollection.php line 207:
Does pagination only work with a GET action?
I would apreciate some help.
This is my code so far
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
Solution
Yes pagination only works with get parameters.
You should use GET
method for your search page. POST
requests aren't meant for the purpose of displaying data. Why? There are many reasons, but to be short I will give you two examples:
With
GET
parameters, let's say you are on sixth page - you can copy the link and paste it to friend and he will be able to view the same content as you. WithPOST
this is impossible.You can not use back button with
POST
requests, if you manage to get pagination to work.
POST
requests are useful when you need to submit data to the server, in order to create new record, for example.
So I suggest you to change your route type to GET
and your search form method to GET
.
Answered By - Sh1d0w
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.