こんにちは、わいまつです。 今回は、Laravelでパスパラメータとクエリパラメータを同時に送る方法を解説いたします。
こちらの記事はパスパラメータとクエリパラメータを同時に送りたいが、方法が分からない!という方向けです。
私も軽く検索した結果、簡潔に説明しているページがなかったため作りました。
パスパラメータとクエリパラメータを同時に送る
今回は以下のようなURLを想定しています。
http://localhost:8000/test/1?query_id=2
パスパラメータとクエリパラメータの説明は以下を御覧ください。
[blogcard url=”https://qiita.com/hirokisoccer/items/7ccc7c959ccb5efc080f”]
今回の例だと、
パスパラメータ: /1
クエリパラメータ: query_id=2
となります。
さて、ここから実際にルーティング・コントローラー・ビューを実装していきます。
ルーティングにおいて、パスパラメータは{パラメータ名}で定義しておきます。
パスパラメータはtest_idという名前にしています。
今回はtestというルート名で、TestControllerのindexアクションに紐付けます。
/belongs-to/routes/web.php
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
{中略}
Route::get('/test/{test_id}', 'TestController@index')->name('test');
コントローラーに処理を書いていきます。
コントローラーはこれだけです。コントローラーの引数に、ルートパラメータである$test_idと、クエリパラメータを受け取るための$requestを書きます。(パスパラメータも$requestで取得できます。)ここが今回の重要ポイントですね。
/belongs-to/app/Http/Controllers/TestController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
public function index($test_id, Request $request)
{
// $test_id = $request->test_id; // こちらでもOK
$query_id = $request->query_id;
// なんらかの処理
return view('test', compact('test_id', 'query_id'));
}
}
あとはビューに渡してあげるだけです。
blade側を見ていきましょう。
/belongs-to/resources/views/test.blade.php
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
テストID: {{ $test_id }}
クエリID: {{ $query_id }}
<a href="{{ route('test', ['test_id' => $test_id, 'query_id' => $query_id]) }}">リダイレクト {{ route('test', ['test_id' => $test_id, 'query_id' => $query_id]) }}</a>
</div>
</div>
</div>
@endsection
パスパラメータである、$test_idとクエリパラメータである$query_id、どちらもビューに表示されています。
また、リダイレクトや、routeヘルパを使うこともできます。
いかがでしたでしょうか。
今回は、Laravelでパスパラメータとクエリパラメータを同時に送る方法を解説いたしました。
Twitterでは日々の気づき等もつぶやいているのでぜひご登録ください。よければコメント、記事のシェア等してくれたら嬉しいです。ではまた。