タイトルのとおりなのですが、 https://github.com/sebastiaanluca/laravel-router が良いのでオススメしたい。
導入したらどうなるか
Class で Routing 書けるようになります!
<?php
declare(strict_types=1);
namespace App\Http\Routers;
use App\Http\Controllers\IndexController;
use SebastiaanLuca\Router\Routers\Router;
/**
* Class IndexRouter
* @package App\Http\Routers
*/
final class IndexRouter extends Router
{
/**
* @return void
*/
public function map(): void
{
$this->router->group([
'middleware' => ['web'],
'prefix' => '/',
], function () {
$this->router->get('', IndexController::class)->name('index');
});
}
}
こんな感じです。
この例では /
へのアクセスを App\Http\Controllers\IndexController::__invoke
で受ける例です。
※ 僕は、 single action controller を多用するのが好きなのでこのような使い方を良くします。
もし、 App\Http\Controllers\IndexController
に index()
method, create()
method を用意する場合は、以下のように書けます。
// ..snip..
$this->router->group([
'middleware' => ['web'],
'prefix' => '/',
], function () {
$this->router->get('', IndexController::class.'@index')->name('index');
$this->router->get('create', IndexController::class.'@create')->name('create');
});
// ..snip..
どうでしょう?
もし、この時点で"あ、良さそう"と思ったら、迷わず https://github.com/sebastiaanluca/laravel-router を導入しても損は無いかと思います。
何が嬉しいの?
まず、 web.php や api.php にべた書きするのに比べて、 Class になったので UnitTest が格段に楽に 書けます。
安心感!大切ですよね。(dusk とかでリクエスト通ればええやん…って話もあるけど、単体で Test Green なの、やっぱりいいよねって。)
web.php, api.php の肥大化が防げます。
長くなるよね。 diff とか面倒な時も出てくるし…
もちろん、単一の Class で全ての Routing を網羅している状態だと同じことが起きますが、せっかく Class で切り出せるようになったなら、その恩恵を受けて Class 分割してみるのも良さそうでしょ?って。