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