2017-03-21 6 views
0

Laravel 5.3でページングのかなりのURLを取得する方法はありますか?Laravel 5.3ページング用のAPI用URL

たとえば、デフォルトで:

検索キーワードは次のとおりです。something new

http://localhost/project/search/something%20new?page=2

{ 
    "total": 19, 
    "per_page": 5, 
    "current_page": 1, 
    "last_page": 4, 
    "next_page_url": "http://localhost/project/search/something%20new?page=2", 
    "prev_page_url": null, 
    "from": 1, 
    "to": 5, 
    "data": [ 
    { 
    // result 
    } 
    ] 
} 

そして、何私が取得したいと思います:

http://localhost/project/search/?page=2 

また、ページネーションをこの方法でレンダリングし、改ページに追加する必要がありますこのように表示されます。

コントローラ。

public function search(Request $request) 
{ 
    $search = $request->name; 

    $searchValues = preg_split('/\s+/', $search, -1, PREG_SPLIT_NO_EMPTY); 

    $result = abcModel::where(function ($q) use ($searchValues) { 
     foreach ($searchValues as $value) { 
      $q->orWhere('city', 'like', "%{$value}%"); 
      $q->orWhere('country', 'like', "%{$value}%"); 
      $q->orWhere('name', 'like', "%{$value}%"); 
      } }) 
     ->orderby('id','desc') 
     ->paginate(20); 

    return response()->json($result); 
} 

ルート、

Route::post('search/',array('uses' => '[email protected]')); 

リクエストとレスポンスが上記..です

答えて

1

あなたは代わりにGETのPOSTを通じてクエリ文字列を送信するために、検索パスに使用するHTTPメソッドを切り替える必要があります。

Route::get('project/search/{query}', '[email protected]'); 

これは、限り、あなたは要求と実際のデータを処理しているよう

Route::post('project/search/', '[email protected]'); 

のようなものに変更することになりますので、コードなしで私はあなたがこのように設定した経路を持っていると仮定しています掲載オブジェクトがコントローラに渡され、POST本体にGETクエリパラメータと同じ名前が保持されている場合、コードが必要な場合は、コードに最小限の変更が必要です。

さらにそれを取って、pageパラメータをPOST本体で処理しても、URLはhttp://localhost/project/search/のままです。

+0

更新されたコントローラとルートをチェックしてください。 –

+0

更新されたルートには、引き続きURLにGETパラメータとして検索クエリが含まれています。あなたはそれを削除する必要があります。また、コントローラの引数が正しくありません。あなたの関数定義は 'public function search(Request $ request)'でなければならず、 'Request'クラスの' input() 'メソッドで値を取得します。リクエストクラスのドキュメントをご覧ください:https://laravel.com/docs/5.3/requests –

+0

その作品は多くの兄弟に感謝します。 –