web-dev-qa-db-ja.com

Laravel 5.1URLにクエリ文字列を追加

私はこのルートを宣言しました:

Route::get('category/{id}{query}{sortOrder}',['as'=>'sorting','uses'=>'CategoryController@searchByField'])->where(['id'=>'[0-9]+','query'=>'price|recent','sortOrder'=>'asc|desc']);

これをURLで取得したい: http:// category/1?field = latest&order = desc これを実現する方法は?

7
Arnab Rahman

クエリ文字列はURIの一部ではないため、ルートでクエリ文字列を定義しないでください。

クエリ文字列にアクセスするには、リクエストオブジェクトを使用する必要があります。 $request->query()は、すべてのクエリパラメータの配列を返します。これをそのまま使用して、単一のクエリparam $request->query('key')を返すこともできます。

class MyController extends Controller
{
    public function getAction(\Illuminate\Http\Request $request)
    {
        dd($request->query());
    }
}

その場合、ルートはそのようになります

Route::get('/category/{id}');

コメントの編集:

URLを生成するには、Laravel内でURLジェネレーターを使用できますが、URLで生成するクエリパラメーターの配列を指定するだけです。

url('route', ['query' => 'recent', 'order' => 'desc']);
3
Wader

uRLに他のパラメータがある場合は、使用できます。

request()->fullUrlWithQuery(["sort"=>"desc"])
17
Route::get('category/{id}/{query}/{sortOrder}', [
    'as' => 'sorting',
    'uses' => 'CategoryController@searchByField'
])->where([
    'id' => '[0-9]+',
    'query' => 'price|recent',
    'sortOrder' => 'asc|desc'
]);

そして、URLは次のようになります:http://category/1/recent/asc。また、publicディレクトリに適切な .htaccess ファイルが必要です。 .htaccessファイルがない場合、URLはhttp://category/?q=1/recent/ascのようになります。しかし、$_GETパラメーター(?q=)についてはよくわかりません。

0
Grzegorz Gajda