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