そうだ FormRequest の代わりに Spatie Laravel-data を使おう!

今回の投稿は

Spatie Laravel-data です。

https://spatie.be/docs/laravel-data/v3/introduction

細かい説明よりも実装例を見てみましょう。

<?php

namespace App\Http\Requests\Customers;

use Spatie\LaravelData\Data;

class StoreCustomerRequest extentds Data
{
    public function  __construct(
        public string $lastName,
        public string $firstName,
        public string $email,
    ) {}
}

マジックメソッドじゃないです!

<?php

namespace App\Http\Controllers\Customers;

use App\Http\Controllers\Customers;
use App\Http\Requests\Customers\CustomerStoreRequestData;

class StoreCustomerController extends Controller
{
    public function __invoke(StoreCustomerRequest $storeCustomerRequest)
    {
        dump(
            $storeCustomerRequest->lastName,
            $storeCustomerRequest->firstName,
            $storeCustomerRequest->email,
        );
    }
}

実際に書いてみると、利点に気が付きます。

IDEで $storeCustomerRequest-> までタイプすれば、候補としてメンバ変数が表示されます。
そう、typoを恐れながら書く必要がありません。 ->lastNeme とか ->input(‘lastNeme’)なんてつまらない typoをすることがずっと少なくなります。

インストール

難しいことは要りません。PHPer のみんなが大好きな composer コマンドで簡単にインストールできます。

$ composer require spatie/laravel-data

もちろんバリデーションもできます!

public static function rules(): array
{
    return [
        'lastName' => [
            'required',
            'string',
            'max:30',
        ],

        ...
	];
}

public static function messages(): array
{
    return [
        'lastName' => [
            'required' => '必須入力です',
            'string'   => '正しく入力してください',
            'max:30'   => '30文字以下で入力してください',
        ],

        ...
    ];
}

ひとつ気をつけることとして Spatie Laravel-data を使う際の rules と messages メソッドは static で宣言する必要があります。

スネークケースなパラメーターをキャメルケースにマッピングしたいですか?

できます!そう、Spatie Laravel-data ならね!
この続きの記事は別記事にまとめます。待ちきれない方は Spatie Laravel-data 公式サイトを見てみましょう!

それでは初回の投稿記事はここまで。また次回お会いしましょう!