【Laravel】パスパラメータとクエリパラメータを同時に複数送る方法

こんにちは、わいまつです。 今回は、Laravelでパスパラメータとクエリパラメータを同時に送る方法を解説いたします。

こちらの記事はパスパラメータとクエリパラメータを同時に送りたいが、方法が分からない!という方向けです。

私も軽く検索した結果、簡潔に説明しているページがなかったため作りました。

パスパラメータとクエリパラメータを同時に送る

概要

今回は以下のようなURLを想定しています。


http://localhost:8000/test/1?query_id=2

パスパラメータとクエリパラメータの説明は以下を御覧ください。

今回の例だと、

パスパラメータ:  /1

クエリパラメータ:  query_id=2

となります。

完成イメージ

実装

さて、ここから実際にルーティング・コントローラー・ビューを実装していきます。

1.ルーティングの設定

ルーティングにおいて、パスパラメータは{パラメータ名}で定義しておきます。

パスパラメータは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');

2.コントローラーにメイン処理を書く

コントローラーに処理を書いていきます。

コントローラーはこれだけです。コントローラーの引数に、ルートパラメータである$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'));
    }
}

あとはビューに渡してあげるだけです。

3.blade.phpの作成

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では日々の気づき等もつぶやいているのでぜひご登録ください。よければコメント、記事のシェア等してくれたら嬉しいです。ではまた。

 

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です