Laravelで、リクエスト(Request)というのは、ブラウザを通してユーザーから送られる情報をすべて含んでいるオブジェクトのことです。例えば、会員登録のフォームなら、画面でユーザーが入力したEメール、パスワード、名前、住所だけでなく、何のブラウザを使用したか(User Agent)、どのIPから送られたか、どのURLからアクセスしたかなど、また、会員ログイン後の画面なら、会員認証において保存されたクッキーもブラウザを介して、リクエストに含まれます。

リクエストの使用

リクエストの代表的な使用は、以下のようにコントローラのメソッドのパラメータです。以下は、Laravelのドキュメントからのコードから引用からですが、会員登録画面でのPOSTされたときにコールされるstoreメソッドです。

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * 新規ユーザーの作成
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        $name = $request->input('name');

        //
    }
}

また、Httpのミドルウェアでも、handle()のパラメータとして利用されています。


use Closure;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('/home');
        }

        return $next($request);
    }
}

ミドルウェアと言えば、コントローラのコンストラクタでも$requestにアクセスが可能です。


namespace App\Http\Controllers;

class UserBaseController extends Controller
{
   protected $ip, $userAgent;

   public function __construct()
   {
       $this->middleware(function ($request, $next) {
            $this->ip = $request->ip();
            $this->userAgent = $request->userAgent();

            return $next($request);
        });
 
        //
    }
}

ユーザーの入力値の抽出

先のリクエストのオブジェクトから、ユーザーが入力した値を取り出すには、以下のようにいろいろなメソッドがあります。

まず、入力値を全部とりだす。$inputは、連想配列の変数です。

// 入力値を全部とりだす。
$input = $request->all();

// これも、入力値を全部とりだすが、all()と違ってファイル関連のデータはなし
$input = $request->input();

// これはヘルパー。input()と同じ
$input = request();

フォームからではなく、クエリのデータ、例えば、http://localhost/user?x=10&y=20 のxとyの値 を取り出すには、

$input = $request->query();

ちなみに、all()や、input()には、すでにクエリのデータも含まれています。

今度は、指定した入力値だけを取り出すには、


// 'name'の値を取り出す
$name = $request->get('name');

// これも、'name'の値を取り出す
$name = $request->input('name');

// これも、'name'の値を取り出す
$name = $request->name;

// これはヘルパー
$name = request('name');

いろいろありますね。違いとしては、

入力値が連想配列なら、

つまり、

<form>
    <input type="text" name="items[]['price']" value="100">
    <input type="text" name="items[]['price']" value="200">
</form>

のようなフォームのときは、


$price = $request->input('items.0.price'); // 100を返す
$price = $request->get('items.0.price'); // nullを返す

と、inputは使えますが、get()は使えません。

最後に、例えば、http://localhost/user?name=yamadaのような、クエリからの指定の値を取ってくるには、以下のどれでもOKです。

$name = $request->query('name');
$name = $request->input('name');
$name = $request->get('name');

となります。

By khino