Laravel5でFormでPOSTする

PHPフレームワークのPOST値は結局はPHPなのでスーパーグローバル変数としての$_POSTで受け取れるのですが、これで受け取らないというのが普通です。$_POSTで受け取っちゃうとあんまりよろしくないことになりかねないのでできるだけフレームワークの規約に従うのがよいです。
Laravel 5.4 HTTPリクエスト

LaravelのPOST

とはいえいろいろな方法で取得できるのもこれまた事実です。私個人としてはDependency Injection (DI)でいろいろやるのがLaravelらしいと思います。

  • Input (Facade)
  • Request (Facade/DI)
  • FormRequest (DI)

Formの設計

ここでは全体の流れだけで把握したいので簡素なものにしておきます。

  • URI: /members/signin
  • Routing: routes/web.php
  • Controller: app/Http/Controllers/MembersController.php
  • View: resources/views/members/signin.blade.php

Formを作成

ルーティング、コントローラ、ビュー

まずはルーティング、コントローラ、ビューで任意の適当なページを作成しておきます。
Lravel5の最初の1ページ
ルーティングでは、getとpostの両方を受け取れるようにしておきます。

Route::match(['get', 'post'],'members/signin', 'MembersController@signin');
Route::get('members/signin_complete', 'MembersController@signin_complete');

ビューのFormの作成

ビューで適当なFormを作成します。

<h1>Form</h1>
<form action="/members/signin" method="post">
    <div><input type="text" name="user_name"></div>
    <div><input type="password" name="user_password"></div>
    <input type="hidden" name="_token" value="{{csrf_token()}}"></div>
    <div><input type="submit" value="送信"></div>
</form>

さてここでLaravelが優れているのはCSRFを半自動的に行ってくれることです。面倒なトークンの発行、セッション管理などをhiddenにトークンを設定するだけで全部自動的にやってくれます。エラーの具体的な処理はこちらで詳しく説明していありました。またドキュメントでも詳しく説明してます。

コントローラ

Dependency Injection (DI)を使ってリクエストを処理する場合は、Illuminate\Http\Requestを設定しておきます。DBも使うことになるのでIlluminate\Support\Facades\DBもuseしておきましょう。

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class MembersController extends Controller
{
    /**
     * 指定ユーザーのプロフィール表示
     *
     * @param  int  $id
     * @return Response
     */
    public function signin(Request $request)
    {
        var_dump($request->input('user_name'));
        var_dump($request->input('user_password'));

        return view('members/signin');
    }

}

これでFormからPOST値を受け取ることができます。
POST値は$request->input(‘NAME’))で取得できます。formのnameに設定したものを引数にすればよいです。
すべてのPOSTを受け取るには$request->all()でやります。


PHPフレームワーク「Laravel」でフォームの値を取得する
HTTP Requests
初めてのLARAVEL 5.1 : (16) FORMの作成
Laravel 5.1 入門記 その6(Request 編)

Last update: 2017.05.01 (月)