Laravelはとても便利なので、ControllerでLaravelが提供してくれるリクエストとレスポンスのクラスを活用するだけで簡単に処理が書けてしまいます。
例えば
return view('view_name', $params);
このようにするとレスポンスが簡単に返せます。
ただ、これだとControllerを呼ばないとレスポンスが得られないため、$params
の色んなパターンを試すのが面倒です。
Responsableインターフェース
LaravelにはResponsableインターフェースというものがあります。このInterfaceを実装しているクラスをControllerから返せば、いい感じにレスポンス化してくれます。
<?php
declare(strict_types=1);
namespace App\Http\Response\Top;
use Illuminate\Contracts\Support\Responsable;
use Illuminate\View\View;
class IndexResponse implements Responsable
{
/**
* @var Params
*/
private $params;
public function __construct(Params $params)
{
$this->params = $params;
}
public function toResponse($request = null): View
{
return view('top.index', [
'params' => $params
]);
}
}
このように簡単にResponsableなクラスが作れます。
Responsableなクラスのテスト
レスポンスクラスがControllerと分離していることで、外から引数を渡し、簡単にテストすることができます。
<?php
declare(strict_types=1);
namespace Tests\Unit\App\Http\Response\Top;
use App\Http\Response\Top\IndexResponse;
use Tests\TestCase;
class IndexResponseTest extends TestCase
{
public function testMakeResponse()
{
$response = new IndexResponse(['title' => 'トップページです']);
$this->assertContains('<h1>トップページです</h1>', $response->toResponse()->render());
}
渡す引数を変えることで、簡単に複数のレスポンスを作ることができます。