一般社団法人 全国個人事業主支援協会

COLUMN コラム

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

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

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

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

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

概要

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


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

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

[blogcard url=”https://qiita.com/hirokisoccer/items/7ccc7c959ccb5efc080f”]

今回の例だと、

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

 

The following two tabs change content below.

matsuzaki_y0921

最新記事 by matsuzaki_y0921 (全て見る)

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア