こちらの記事で紹介されていた、コントローラーを使うのを止めて単一責務のHandlerにすると便利だよという内容でした。
Laravelのルーティングでは、 SomeController@someMethod
という書き方以外にも、 __invoke
メソッドを実装したクラスを直接渡すことができます。
Route::get('/user/{user}', Handlers\ShowUserHandler::class);
この場合、 __invoke
メソッドが呼ばれることになります。DIやRoute Model Bindingもこのメソッドで可能です。
<?php
namespace App\Http\Controllers\Handlers;
use App\Models\User;
class ShowUserHandler
{
public function __invoke(User $user)
{
return $user;
}
}
何が嬉しいのかちゃんと理解できていないので、後日追記したい。