🐝

【Memo #0.0.2】URL のクエリパラメータを取得

2022/02/02に公開

はじめに

  • Laravel 初学者の私が学習した内容をアウトプットしていく記事になります。
    冗長している点や軽い書き方などあれば御指南をお願いいたします。。。📝

やりたいこと

  • ページの遷移先で Bootstrap tabs があるので、デフォルトを指定したい。
  • だが実際にはうまくいかず、上司の方の手を煩わせることに。。。そこで、御指南いただいたのが、「URL のクエリパラメータを取得して、条件をつけるだけ」

URL のクエリパラメータを取得

  • 最初、「URL のクエリパラメータを取得する」 と、言われたときは理解ができなかった。

単語それぞれの意味
取得の仕方
これをすることでどんな結果が返ってくるのか
全容が掴めていない

上記のものが、原因で理解が追いついていなかった。。。要は、勉強不足。😶‍🌫️

まずは、単語ごとに理解しよう

クエリ

DB への問い合わせ で、なんとなく想像はつくと思います。該当のデータを DB から取ってくる時に命令して必要なデータを取ってくることができる。
データベースに対する検索条件を命令して取ったり入れたりしている。

パラメータ

「変数」
今回でいう 「パラメータ」 は、URLに付随して使用する変数 になります。

クエリパラメータ

http://XXX/「?」+「zenn」+「=」+「memo」 のように表記されます。
情報をWebサーバーに伝えるためにURLに付け加える情報になります。「?」が「ここからクエリパラメータ」を示し、「zenn」という名前のパラメータ(変数)の値として「memo」を指定していることになります。

取得の仕方

Requestクラスを使用して、inputメソッドでユーザ入力を取得

Illuminate\Http\Requestインスタンスのシンプルなメソッドを利用すれば、ユーザ入力の全てにアクセスできます。リクエストのHTTP動詞に気をもむ必要はありません。HTTP動詞に関わらず、inputメソッドでユーザ入力を取得できます。

Laravel Document 非常にわかりやすい。。。

ExampleController.php
public function show(Request $request)
    {
        $name = $request->input('name');
    }

今回は、show メソッドで view に渡します。 Illuminate\Http\Requestクラスを用いて、inputで一つだけ取ってきて格納してくれます。

これをすることでどんな結果が返ってくるのか

今回は、URL のクエリパラメータを取得して view での表示を指定します
実際のコードが以下のような具合

UserController.php
public function show(User $user, Request $request)
    {
        $user->load('portfolios.technologies', 'portfolios.user');
        $introduction = ReplaceClickableUrl($user->user_self_introduction);
        $currentUser = Auth::user();
        $isPublished = is_null($request->input('is_published')) ? true : (bool)$request->input('is_published');
        $portfolios = Portfolio::where('is_published', $isPublished)->orderBy('created_at', 'desc')->where('user_id', $user->id)->get();
        $portfolios->load('portfolioLikes');

        if (Auth::guard('company')->check()) {
            return view('user.profiles.show', compact('user', 'portfolios', 'introduction', 'currentUser'));
        }

        return view('user.profiles.show', compact('user', 'portfolios', 'introduction', 'currentUser','isPublished'));
    }

$isPublishedの行が今回の要点になります。
三項演算子で、ユーザーがページ遷移してきた時の URL が最初はユーザーの ID でページの指定が出来ていないのが原因で、Bootstrap tabsのデフォルト表示を出来ていなかった訳です。show.blade.phpnav タブには、?is_published=0?is_published=1hrefで指定していたので、これを三項演算子で指定するようにしました。

UserController.php
$isPublished = is_null($request->input('is_published')) ? true : (bool)$request->input('is_published');

ユーザーがページ遷移したときにis_nullで空の判定をして、Nullでなかったらtrueでそうでなかったらis_published カラムのデータを取ってきて格納 (false の処理)の値を実行してくれます。

これで、ページ遷移してきたときにデフォルトの表示を条件分岐で指定することができました。

まとめ

  • 今回は、URL のクエリパラメータの取得の方法と行っている内容についてまとめました。
    理解したつもりが一番怖いので、色々検索してみて知見を漁りながら答え合わせをしたいと思います。
    最後までご拝読いただきありがとうございました🙇🏻‍♂️

Discussion