Laravel ではミドルウェアの定義と呼出し、コントローラのアクションとURLといったものを紐づけます。この時クラス名を使うと後にどれが何をしているか探しやすくなるという小技を紹介します。具体的には次です。
<?php
use App\Http\Controllers\AdminBrowserAPI\Admin\AdminController;
use App\Http\Controllers\AdminBrowserAPI\Auth\LoginController;
// ルーティングで紐づけるコントローラクラスを ::class で記述する
Route::name('auth.')->group(static function () {
Route::post('login', LoginController::class.'@login')->name('login');
Route::post('logout', LoginController::class.'@logout')->name('logout');
});
// 一アクションコントローラを使うならば @ 以下も不要
// @see https://readouble.com/laravel/8.x/ja/controllers.html?header=シングルアクションコントローラ
// 複雑な処理をコントローラでどうこうする時にコントローラ内で処理がまとまっていることを保証するためによくつかいます。
// また利点としてはファイルが増える代わりにどこで何が使われているか一見しやすくもなります。
Route::get('member/search', MemberSearchController::class)->name('member.search');
// app/Http/Kernel.php
namespace App\Http;
use App\Http\Middleware\Authenticate;
// 省略
class Kernel extends HttpKernel
{
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => Authenticate::class,
'auth.basic' => AuthenticateWithBasicAuth::class,
'bindings' => SubstituteBindings::class,
'cache.headers' => SetCacheHeaders::class,
'can' => Authorize::class,
'guest' => RedirectIfAuthenticated::class,
'password.confirm' => RequirePassword::class,
'signed' => ValidateSignature::class,
'throttle' => ThrottleRequests::class,
'verified' => EnsureEmailIsVerified::class,
// ↓独自定義のミドルウェア
// ルーティング内でミドルウェアを呼び出すときも ::class を使えるようにします。
SetLocale::class => SetLocale::class,
];
/**********
* routes/web.php
************/
Route::middleware([
SetLocale::class // クラス文字列で使うミドルウェアを定義
])->any('hoge', static fn () =>view('sample_view'));
この様にすると次の動画の様に IDE の機能(例では PhpStorm の Ctrl+B)によって使っている定義元へジャンプできるようになり、便利です。
