Laravel=で始めたばかりで、適切なページネーションで検索関数を作成しようとしています。この関数は1ページ目で機能しますが、2ページ目では機能しません。次のページに進みますが、答えが見つからないようです。
これはIndexController内の私の検索関数です:
public function search()
{
$q = Input::get('search');
# going to next page is not working yet
$product = Product::where('naam', 'LIKE', '%' . $q . '%')
->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
->paginate(6);
return view('pages.index', compact('product'));
}
これは私のルートです:
Route::post('search{page?}', 'IndexController@search');
これは2ページ目のURLです:
/search?page=2
これが私のページネーションの表示方法です:
{{ $product->appends(Request::get('page'))->links()}}
エラー:
MethodNotAllowedHttpException in RouteCollection.php line 218:
リクエストに応じてエラーを取得します。
ルート:
Route::get('search/{page?}', 'IndexController@search');
エラー:
MethodNotAllowedHttpException in RouteCollection.php line 218:
in RouteCollection.php line 218
at RouteCollection->methodNotAllowed(array('GET', 'HEAD')) in RouteCollection.php line 205
at RouteCollection->getRouteForMethods(object(Request), array('GET', 'HEAD')) in RouteCollection.php line 158
at RouteCollection->match(object(Request)) in Router.php line 780
at Router->findRoute(object(Request)) in Router.php line 610
at Router->dispatchToRoute(object(Request)) in Router.php line 596
at Router->dispatch(object(Request)) in Kernel.php line 267
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
at Pipeline->then(object(Closure)) in Kernel.php line 149
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116
at Kernel->handle(object(Request)) in index.php line 53
私の質問が明確で正しい形式であることを願っています。よろしくお願いします(私の悪い英語はごめんなさい)
回答:
私はこの投稿の答えを this postの助けと組み合わせて使用することになりました
最初の検索にはpost関数を使用し、次のページにはget関数を使用しました。これが可能になったのは、URLを検索するようになったからです。
編集:
Route::get
エラー次のページにフィルターを適用する場合は、次のようにページネーターにフィルターを追加する必要があります。
$product = Product::where('naam', 'LIKE', '%' . $q . '%')
->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
->paginate(6);
$product->appends(['search' => $q]);
そして、ルートを投稿から変更して取得します:
Route::get('search', 'IndexController@search');
Route::get('product', function () {
$product= App\product::paginate(15);
$product->setPath('custom/url');
});
見る:
{{ $product->appends(['search' => Request::get('page')])->links() }}
$searchdata = \Request::get( 'inputTextFieldname' ); \make as global
$searchresult = Modelname::where ( 'blogpost_title', 'LIKE', '%' .$searchdata . '%' )->paginate(2);
return view( 'search', compact('searchresult') );
ビューページで
{{$searchresult->appends(Request::only('inputTextFieldname'))->links()}}
メソッドを取得するためのルートを作成する
Route::get('/search', ['as' => 'search', 'uses' => 'searchController@index']);
これは完了です、ありがとう、
_search/1
_、_search/2
_のようなURLのページを変更したいと思いますか?まず、ルートはおそらくRoute::post('search/{page?}')
でなければなりません。
この変更のみが機能するかどうかはわかりませんが、機能しない場合は、このようなページを解決する必要があります
_public function search(\Illuminate\Http\Request $request, $page = 1)
{
$q = $request->get('search');
\Illuminate\Pagination\Paginator::currentPageResolver(function () use ($page) {
return $page;
});
# going to next page is not working yet
$product = Product::where('naam', 'LIKE', '%' . $q . '%')
->orWhere('beschrijving', 'LIKE', '%' . $q . '%')
->paginate(6);
return view('pages.index', compact('product'));
}
_
GETメソッドで検索フォームを使用している場合、これらのようなものを使用して、検索結果のページネーションを保持します。
public function filter(Request $request)
{
$filter = $request->only('name_operator','name_value','email_operator','email_value', 'phone_operator','phone_value', 'gender_value', 'age_operator','age_value');
$contacts = $this->repo->getFilteredList(array_filter($filter));
$contacts->appends($filter)->links(); //Continue pagination with results
return view('dashboard::index', compact('contacts'))->withInput($request->all());
}
私の場合、laravel 5.7がインストールされています。
$perPage = $request->per_page ?? 10;
$data['items'] = User::where('name', 'like', '%'. $request->search . '%')
->paginate($perPage)
->appends(['search' => $request->search, 'per_page' => $request->per_page]);
return view('users.index', $data);
私のビューファイルのコードは
ページごとドロップダウンを選択し、検索エリア
<form role="form" class="form-inline" method="get" action='{{ url('/user') }}'>
<div class="row">
<div class="col-sm-6">
<div class="dataTables_length">
<label>Show
<select name="per_page"
onchange="this.form.submit()"
class="form-control input-sm">
<option value=""></option>
<option value="10" {{ $items->perPage() == 10 ? 'selected' : '' }}>10
</option>
<option value="25" {{ $items->perPage() == 25 ? 'selected' : '' }}>25
</option>
<option value="50" {{ $items->perPage() == 50 ? 'selected' : '' }}>50
</option>
</select>
entries
</label>
</div>
</div>
<div class="col-sm-6">
<div class="dataTables_filter pull-right">
<div class="form-group">
<label>Search:
<input type="search" name="search" class="form-control input-sm"
placeholder="Name" value="{{ request()->search }}">
</label>
</div>
</div>
</div>
と私のページネーションジェネレーターコード
{{ $items->appends(['search' => request()->search, 'per_page' => request()->per_page])->links() }}
ビューの簡単な方法(Laravel 5.7)
$product->appends(Request::all())->links();
ページネーションのために、シンプルなフォームを作成する必要があります:
<form action="{{URL::to('/search')}}" method="post">
<input type="hidden" name="query"/>
<select name="pages">
@for($p = 1; $p < $products->lastPage(); $p++ )
<option value="{{ $p }}">{{ $p }}</option>
@endfor
</select>
</form>
ページネーション方法は次のとおりです。
$results->count()
$results->currentPage()
$results->firstItem()
$results->hasMorePages()
$results->lastItem()
$results->lastPage() (Not available when using simplePaginate)
$results->nextPageUrl()
$results->perPage()
$results->previousPageUrl()
$results->total() (Not available when using simplePaginate)
$results->url($page)