スライドショー

【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については次の記事で解説していますのでご覧ください。

【Laravel入門】まだ使ってないの!?超便利なLaravelDebugbarを使おう
更新日 : 2018年7月3日

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

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

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タグをベタ打ちしましたが、こういったものを省略するヘルパなども別途公開されているようです。

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

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

オータケ

オータケ

30歳、フリーランスプログラマ。中学の頃よりプログラミングに興味を持ちゲーム開発やWebサイト構築などを経験
新しいフレームワークやライブラリに興味があり革新的な機能が含まれていると泣いて喜ぶ。