クマのブログ

つまづいたところ、学びを書いていきます

【Laravel】Requestクラスについて

前提

背景

  • 業務中につまづいた点がRequestクラスの理解不足(というより、Requestという概念の忘却)が原因だったので、公式ドキュメントを見ながら再確認

  • 公式ドキュメントから個人的に「これ便利だな」「こんな使い方できるんだ」を抽出して書き出し

readouble.com

内容

基本的な使い方(依存注入)

  • クラスは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へのアクセスをまとめます。