LaravelではRequestを使おう!
はじめに
先輩「何この$_POSTって、Requestを使わない理由は何?」
僕「え?りくえすと??$_POSTと何が違うの??」
先日Laravelを初めて使用してサービスを作った際に先輩からご指摘をいただきました。
$_POSTではなくRequestを?
調べてみるとなるほどな、納得納得。
とまあこんな初心者レベルですが、備忘録として、あわよくば同じ立場の初心者さんのためにも残しておこうかと思います。
開発環境
PHP 7.3.25
Laravel 8.16.1
Requestってなーに?
Laravelで、リクエスト(Request)というのは、ブラウザを通してユーザーから送られる情報をすべて含んでいるオブジェクトのことです。例えば、会員登録のフォームなら、画面でユーザーが入力したEメール、パスワード、名前、住所だけでなく、何のブラウザを使用したか(User Agent)、どのIPから送られたか、どのURLからアクセスしたかなど、また、会員ログイン後の画面なら、会員認証において保存されたクッキーもブラウザを介して、リクエストに含まれます。
引用:ララジャパン
ざっくりいうと、$_POSTとか$_GETとか、その他ユーザーが通信を行った情報を全てまるっとゴリっとまとめてくれたものか!
ちなみにこの$_POSTとか$_GETとかいうのは、PHPのスーパーグローバル変数の1つで、
これもブラウザからの情報を取得する際に使用できます。
詳細はこちらの記事を参考にするといいかも。
ふむふむ、めちゃくちゃ便利じゃん!
でもなぜRequestを使った方がいいの?
例えばあなたの前に一般電卓と関数電卓があったとします。
四則演算の範疇に収まらない複雑な計算をするときに一般電卓でも出来ないわけではないですが、関数電卓があれば楽ちんに計算出来ますよね?
そうです。
Requestの方が楽ちんなんです!
上記でも記載した通り、Requestには色々な情報がギュッと詰まっています。
ユーザーがブラウザからフォームで送信したデータはもちろん、
よく使うところの送信が行われたURLからユーザーのIPアドレスまでほんと色々。
これは使わない手はないです。
他にも「型」にも違いがあります。
$_POSTなどのハイパーグローバル変数は基本的に連想配列と文字列で構成されます。
それに比べてRequestはオブジェクト型で構成されます。
さほど影響ないのでは?
果たしてそうでしょうか。。。
取得データの扱いが変わります
まずは下記条件で実験してみましょう。
formデータ:
// user_name→anomeme
// test_data→空欄
<input name="user_name" class="form-control" type="text-input" value="anomeme">
<input name="test_data" class="form-control" type="text-input" value="">
$_POST
array:2 [▼
"user_name" => "anomeme"
"test_data" => ""
]
request()->all()
array:2 [▼
"user_name" => "anomeme"
"test_data" => null
]
お分かりいただけますでしょうか。
そう、test_dataのvalueが別物に変わってますよね?
空白もnullも一緒じゃないか!と思う人がいるかもしれませんが、これは別物です。
・空白は文字列が0のデータ!
・nullは存在しないよ!
です。
例えば isset() 関数でこれを見てみましょうか。
isset($_POST["test_data"])
→ bool: true
isset(request()->all()["test_data"])
→ bool: false
一緒のデータを使用しているのに結果が変わってしまいましたね?
(is_null() でも判定が変わりますね)
長くなりましたが、requestは便利だけどこういった違いがありますよというお話でした。
終わりに
取れる値については他の人がさらに研究をしたりリファレンスを読み解いているので、こちらを参考にしてみるといいと思います。
PHPを勉強してきた人ならフォームデータを$_XXXを取得したくなる気持ちは分かりますが、
一度に様々なデータが取得できるRequestを是非使ってみてください。
これは私からのリクエストです。