【PHP】Laravelでフォームデータ受け渡しをわかりやすく解説(POST)

こんにちは!エンジニアのオータケです!

今回は、Laravelを使ってフォームの値の受け渡しについて解説をしようと思います。

皆さんは他のフレームワークを使ったり、もしくはフレームワークを使わないそのままのPHPでフォームを作ったことがありますか?

フォームを作って値をサーバーに渡して、その値を元にデータベースにデータを保存するなど、いくつかやらないといけないことがありますがLaravelではとても簡単に実現することができます。

本記事では

[基礎] フォームを設置してデータをPOST形式で送る方法
[基礎] POST形式でデータを受け取るためのルーティング処理の書き方
[実践] よくありがちな間違い

について解説していきます。

ぜひご覧ください!

目次

Laravelを使ってFormに入力したデータをPOST形式で送ろう

フォームを作る

まず、フォームを使ってデータを送るにはフォームを作る必要があります。

今回は次のようにビューに記載します。

<form action="{{ url('/message/add')}}" method="POST" class="form-horizontal">
  {{ csrf_field() }}
  <textarea rows="6" name="message"></textarea>
  <button type="submit" name="add">
   追加
  </button>
</form>

普通のHTMLタグとBladeテンプレートエンジンが入り組んでいますが、これから解説していきます。

まずBladeテンプレートエンジンとは、LaravelでViewを書く際に用いられる機能です。

Bladeテンプレートエンジンの書き方を知ることでとてもシンプルにPHPコードを書かなくてもちょっとした処理を短く書くことができます。

最初にformタグのactionでurlという機能を呼び出していますが、これはソースコードの下の方にある「追加」ボタンを押したあとに遷移する飛び先になります。

次の行で{{ csrf_field() }}としていますが、これはCSRF対策で必要な一文になります。

CSRF?と思った方もいるかと思いますがセキュリティ上問題が起きないようにするための対策になります。

深くはここで解説をしませんが興味がある方は調べてみると良いでしょう。

あとはtextareaタグbuttonタグを使っているだけなのでHTMLの知識があればわかっていただける内容かと思います。

ルーティングの設定を行う

フォームができたら、次にルーティングの設定をしなければなりません。

前項のサンプルコードで{{ url(‘/message/add’)}}と書いている部分がありましたが、この宛先にデータを送るためこの宛先を作る必要があります。

/プロジェクトのディレクトリ/routes/web.php

use Illuminate\Http\Request;

Route::post('/message/add', function(Request $request){
});

このように書きましょう。

これで、データを受け取って処理する場所(ルート)を作ることができました。

このあとは・・・

このあとは、データベースに保存する場合は$requestの中に入っている値を使うことでフォームで入力した内容を保存することが可能です。

例えば、先程textareaタグで入力した文字列を取得したい場合は

$request->message

とすることで取得することができます。

このアロー演算子(->)のあとにあるメンバ変数の名前はHTMLのタグのname属性で付けた名前になります。

コントローラで受け取った際のRequestの中身を知りたい

では、先程の章で$request変数の中身をすべて視覚的に見たい場合どうすればよいでしょうか?

Debugbarを使うことで、簡単に情報を見ることができます。

Debugbarについては次の記事で解説していますのでご覧ください。

ブラウザから送られてきたデータだけでなく、デバッグの際によくある変数の表示などをみやすく表示する機能もありとても便利です。

一度使ってみてくださいね。

Postでデータを送る際にエラーが出て送れない?

最後に、フォームからPOST形式でデータを送ったのにサーバー側でエラーがでて受け取りができない場合といったことがあります。

この原因についてですが、よくあるパターンとしてはルーティングファイル内に記載したルートがpostでない場合に起こりえます。

具体的にソースコードで表すと、

use Illuminate\Http\Request;

Route::post('/message/add', function(Request $request){
});

出ないといけない部分が、

use Illuminate\Http\Request;

Route::get('/message/add', function(Request $request){
});

getになっていたりすると正しくデータを受け取ることができません。

もし、正しく動かない方はこのあたりも注意して見直してみましょう!

まとめ

いかがでしょうか?

LaraveでフォームデータをPOST形式で送る方法について解説をしました。

少し、うっかりしやすい面もありますが慣れれば問題なく扱えるのではないかと思います。

今回はフォームを作る際にHTMLタグをベタ打ちしましたが、こういったものを省略するヘルパなども別途公開されているようです。

興味があるかたは調べてみてくださいね。

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次