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');
となります。
メルマガ購読の申し込みはこちらから。