前提
背景
業務中につまづいた点がRequestクラスの理解不足(というより、Requestという概念の忘却)が原因だったので、公式ドキュメントを見ながら再確認
公式ドキュメントから個人的に「これ便利だな」「こんな使い方できるんだ」を抽出して書き出し
内容
基本的な使い方(依存注入)
クラスは
Illuminate\Http\Request
にある基本的に初回アクセス時は
GET
送信、それ以降検索などをかけた際にはPOST
送信が実行されるよくある使い方は以下のように依存注入(DI)を行ってRequestクラスへアクセスするパターン
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { /** * 新しいユーザーを保存 * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $name = $request->input('name'); } }
- これでinputタグの内name属性が'name'である値を取得できる
$name = $request->input('name');
- 以下のようにRuoteにRequestをタイプヒントして、Requestで受けとった値を取得することも可能
use Illuminate\Http\Request; Route::get('/', function (Request $request) { // });
依存注入+ルートパラメータ
- 例えば、ユーザーごとに動的に出力内容を変更するページを実装する時、以下のようなルートになるはず。
use App\Http\Controllers\UserController; Route::put('/user/{id}', [UserController::class, 'update']);
- Controllerでは以下のように、メソッドの引数に$idとすることでメソッド内で$idを使える(Model内のidをfindしたり、、、)
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { /** * 指定ユーザーを更新 * * @param \Illuminate\Http\Request $request * @param string $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } }
リクエスト受信側でできる事
リクエストパスの取得
$uri = $request->path();
- 返り値:パス名
→例…routeがhttp://localhost.com/laravel/index
であればlaravel/index
が取得できる
リクエストパス/ルートの検査
$request->is('admin/*')
- 返り値:boolean
→例…上記コードであればrouteがhttp://localhost.com/laravel/index
であればfalse, http://localhost.com/admin/~
であればtrue
ここまでは超基本なので、別途アウトプットします。
次は実際に自分がつまづいた、直接メソッドの引数にDIできない場合のRequestへのアクセスをまとめます。