Illuminate\Http\Requestについて雰囲気でやっていたので個人的にメモした


Controller内でRequestをいい感じに使えることができるように諸々まとめた

リクエストされたURLを知りたいとき

クエリ文字列が必要ない場合は、以下

$url = $request->url();

クエリ文字列が必要な場合は、以下

$urlWithQueryString = $request->fullUrl();

パスのみが必要な場合は、以下

$uri = $request->path()

リクエストされたURL/メソッドによって処理を分けたいとき

if ($request->is('admin/*')) {
    // 処理
}

名前付きルートに一致するか確かめるときは、以下

if ($request->routeIs('admin.*')) {
    // 処理
}

リクエストメソッドが知りたいときは、以下

$method = $request->method();

リクエストメソッドが指定のものか知りたいときは、以下

if ($request->isMethod('post')) {
    // 処理
}

URLのクエリ文字列にデータを追加したいとき

$request->fullUrlWithQuery(['type' => 'phone']);

リクエストしてきたIPアドレスが知りたいとき

$ipAddress = $request->ip();

リクエストに含まれる入力データが知りたいとき

全て欲しいとき

配列として取得したいときは、以下

$input = $request->all();

連想配列として取得したいときは、以下

$input = $request->input();

特定のものが欲しいとき

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

inputメソッドは2番目の引数としてデフォルト値を渡すことができる。指定した入力値がリクエストに存在しない場合、この値が返される。

$name = $request->input('name', 'Sally');

配列入力を含むフォームを操作する場合は、「ドット」表記を使用して配列にアクセスすることができる

$name = $request->input('products.0.name');

$names = $request->input('products.*.name');

論理入力値の取得

$archived = $request->boolean('archived');

リクエストに値が存在するかを確かめたいとき

リクエストにそもそもnameというkeyが存在しているのか?

if ($request->has('name')) {
    //
}

指定されたすべての値が存在するかどうかを判別することもできる。

if ($request->has(['name', 'email'])) {
    // 処理
}

指定値のいずれかが存在する場合、hasAnyメソッドを利用することができる。

if ($request->hasAny(['name', 'email'])) {
    // 処理
}

こんなこともできたりする

$request->whenHas('name', function ($input) {
    //
});

値がリクエストに存在し、空でないことを確認したいとき

if ($request->filled('name')) {
    //
}

特定のキーがリクエストに含まれていないかを判定したいとき

hasメソッドの逆(?)

if ($request->missing('name')) {
    //
}

入力値を一時保持後のリダイレクトするなどしたいとき

return redirect('form')->withInput();

return redirect()->route('user.create')->withInput();

return redirect('form')->withInput(
    $request->except('password')
);

上記のデータを取得したいとき

$username = $request->old('username');

まとめ

いい感じに使えるようになりたい