15
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Laravel]$request->input() or $request->get() or others... ~備忘録~

Posted at

##はじめに
この記事はプログラミング初学者による備忘録用の記事であり、また、少しでも他の初学者のお役に立てればと思い書いています。

今回は、Laravelには$request->get()や$request->input()といった、LaravelのControllerにおけるリクエストの受け取り方が複数あり、どれを使用すれば良いのか分からなかったので、解決する為に調べたことを備忘録としてまとめておきたいと思います。

間違いなどがございましたら、ご指摘のほどよろしくお願い致します。

##入力値を取得する様々な選択肢がある
下記のような入力値を取得するメソッドは、似たような働きをしますが1つずつ微妙な違いがあります。

public function store(Request $request) {
  $example = $request->input('example');
  $example = $request->get('example');
  $example = $request->example;
  $example = request('example');
  etc...
}

他にも、クエリストリングからの入力値を取得したり、入力データの一部を指定して取得することもできますので、詳細は、Laravel6.x HTTPリクエストを確認して下さい。

##"$request->input()"
$request->input()は、公式ドキュメントでも説明されていますので簡単にまとめておきます。

特徴:
・input()メソッドは、Illuminate\Http\Requestインスタンスのメソッドであり、全てのリクエストのHTTP動詞に対してユーザー入力値を取得できます。

全入力値を連想配列として取得するために、引数を渡さずにinputメソッドを呼び出すことも可能です。

・input()メソッドは、リクエストのペイロード全体(クエリ文字列を含む)から値を取得します。

・リクエストボディ+クエリストリングを取得し、リクエストボディが優先されます。

example.php
$user->name = $request->input('name');

$input = $request->input();

##"$request->get()"
$request->get()は、基本的に使わないようにしています。
理由は、下記の特徴があるからです。(間違いがあればご指摘ください)

特徴:
・$request->get()では、配列から値を取得することができません。

・引数を取らない場合、input()は値を連想配列で返しますが、get()は引数が必須です。

・リクエストボディ+クエリストリングを取得でき、クエリストリングを優先して入力値を取得できますが、クエリストリングからデータを取得したい場合は$request->query('example');といったように、queryメソッドを利用するので使う必要がない。

##"$request->example"(動的プロパティの使用)
$request->exampleは、Illuminate\Http\Requestインスタンスに対する動的プロパティとして、ユーザーインプットにアクセスすることも可能です。

特徴:
動的プロパティを使用すると、まず初めにリクエストパラメータの中で名前が一致するものを探し、なければ次にルーティングのパラメータを探しに行きます。

example.php
$name = $request->name;

##"request()ヘルパ"
request()ヘルパは、現在のリクエストインスタンスを返したり、入力項目を取得したりします。基本的には、$request->input()と同じ働きをします。

特徴:
・引数を空にするとIlluminate\Http\Requestのインスタンスが返ってきます。

・フォーム・パラメータを取得する場合は第1引数でキーを指定します。

・第2引数にはデフォルト値を指定することもできます。

example.php
$request = request();

$value = request('key', $default);

##まとめ
基本的には、公式ドキュメントにも書かれている$request->input()を使用して入力値を取得するのが無難だと思いました。

また、controllerクラスのメソッド内では複数の入力値を指定して使用したいケースが多いと思うので、そのような場合はonlyを使うことで可読性が担保されたままコード綺麗に書けるのではないかと思います。

他にも、$input = $request->all();を利用することで、全入力値を配列で取得することができますが、受け取りたくない値まで受け取ってしまう可能性もあるので基本的には使わないようにしたいと思いました。

##参考文献
Laravel6.x HTTPリクエスト
Laravel6.x ヘルパ

15
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?