[st-kaiwa3 r]Laravelのコントローラーとかで、頻繁にリクエスト(request)って単語が出てくるよね。あれ、どういう意味なの?[/st-kaiwa3]
リクエスト(request)とは、簡単に言えば、「これください!」って他のファイルに頼む事です。
LaravelのControllerでよく使う public function xxx (Request $request) だったら、「サイトを閲覧してるお客さんがブラウザから入力したデータを渡してください」という意味になります。
[st-kaiwa3 r]よく分からない・・[/st-kaiwa3]
というわけで、図解でLaravel初心者でもよく分かるように解説します。
→Laravel初心者が絶望するController,Blade,Routesの関係が図解でよく分かる!
LaravelにおけるRequestとは?
まず、そもそもRequestとはなんなのかを図で説明するとこういう事です。
図のように、ネット閲覧者からの「〇〇のページが見たい」というリクエストがLaravelなどのウェブ開発におけるrequestなんです。
そしてそのページを提供する事をレスポンス(response)と言います。
[st-kaiwa3 r]なるほど。例えば、Google検索から僕のサイトがクリックされると、それがリクエストとしてサーバーのLaravelに飛んでくるんだ。そしてLaravelがそのページを作成してお客さんのブラウザに表示する事がレスポンスなんだね。[/st-kaiwa3]
[st-kaiwa1 r]そういう事!LaravelのControllerのrequestもこれに関係してくるんだ。[/st-kaiwa1]
LaravelのControllerの Request $request とは?
では、今度はLaravelのコントローラーによく出てくる
public function xxx (Request $request) とはなんなのかを説明します。
このカッコ内のRequest というのは、「サイト閲覧者がフォームから入力したデータを受け取る」という意味があります。
例えば、口コミサイトを作ったなら、口コミ投稿フォームがありますよね。
ブログを作ったとしても、ブログ記事の投稿フォームがあるはずです。
この投稿されたデータをデータベースにしまうのがコントローラーの仕事です。
なので、Controller の Request というのは、
フォームに投稿されたデータをBladeにリクエストしてるって事なんです。
→LaravelのController.phpとは?初心者向けにやさしく図入りで解説
→Laravelのblade.phpとは?普通の.phpと何が違う?初心者必須の知識!
[st-kaiwa3 r]つまり、フォームが付いたページ用のコントローラーにはそのRequestっていう記述が必要って事だね。[/st-kaiwa3]
[st-kaiwa1 r]そういう事だよ。[/st-kaiwa1]
[st-kaiwa3 r]でもさなんでRequest $requestって2回書くの?それがよく分からないんだけど。[/st-kaiwa3]
なぜ Request $request と2回書くのか?
まず、カッコ内の最初のRequestというのは、実際には、Illuminate\Http\Request を省略したものです。
→Laravelのuseとは?超初心者向けにシンプルに分かりやすく解説
このIlluminate\Http\RequestというLaravelのシステムが、フォームのデータを拾ってくれるので、まずfunctionの()にRequestと書くわけです。
そして、その受け取ったデータをコントローラー内では、$requestという変数で使うため、
「Requestのデータは$requestとして使うよ」と宣言してるわけです。
[st-kaiwa3 r]うお、変数っていう難しい言葉が・・[/st-kaiwa3]
[st-kaiwa1 r]変数っていうのは、算数でいうXやYだよ。毎回フォームから違う文章が送られてくるから、仮として$requestってしてるって事。[/st-kaiwa1]
そして、先程のフォームを例に出すなら、
項目が1つではなく、複数ありますよね。なので、
それぞれの項目や取得したい情報(ユーザーIDなど)を
blade.php側のフォームのnameから取得します。
これがblade.phpに書かれたフォームです。それぞれname=”xxx”というのが付いてますよね。
それをcontroller側のリクエストで受け取ります。
このコードのように、$request->title とか $request->qid のように、先程のnameを合わせる事で、それぞれのデータが取得できるわけです。
取得したデータは、save()というコマンドを使って、データベースに保存する事ができますし、他にもJavascriptやpythonなどの別の言語に渡して使ったりなど、様々な事ができます。
LaravelのControllerでは、Request以外にも使う事ができる
ちなみに、public function xxx(Request $request) の部分のカッコ内は、別の変数を使う事もできます。
例えば、下の黄枠部分は、blade.phpに書かれたaタグ(リンク)です。
このリンクを踏むと、CrudController@showというファンクションが呼び出されると同時に、$val->wordという変数を渡す設定になってます。
この辞書サイトの「ゴリ」をクリックすると、$wordが「ゴリ」になります。
この場合は、コントローラーには Request を使わず、そのまま$word と書く事で、
ブレードで使われている変数をそのままコントローラーに渡す事ができます。
フォームで入力されたわけではないので、Requestは使ってませんが、このようにblade側の変数をカッコ内に書く事で、渡す事もできます。この場合なら「ゴリ」という単語が渡るわけです。
[st-kaiwa1 r]このサイトの場合は、ゴリという単語を渡す事で、コントローラーが「ゴリ」の投稿をデータベースから検索して、ゴリのページを表示するという仕組みの時に使ったんだ。
今回みたいに$request以外にも変数が使えるから原理を覚えておくと便利だよ。[/st-kaiwa1]
というわけで、LaravelのRequestがなんなのか、分かったでしょうか。