mcpField
L
laravel:form-requests

laravel:form-requests

github.com/jpcaparas開発157148 回インストール17 週間前に更新
リポジトリ

laravel:form-requests について

バリデーションと認可をコントローラーから分離するLaravel開発者向けのフォームリクエストガイドです。ネストしたデータのルール、厳格な入力チェック、テスト方法を扱います。

主な機能

  1. 01Form Requestにバリデーションを集約
  2. 02authorizeでアクセスを制御
  3. 03ネストした配列フィールドを検証
  4. 04ルールとエラーメッセージをカスタマイズ
  5. 05未宣言の入力フィールドを拒否

活用シーン

  1. 01コントローラーの検証を専用リクエストクラスへ移す
  2. 02ネストしたフォームデータを検証
  3. 03開発やCIで余分な入力フィールドを検出

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jpcaparas/superpowers-laravel --skill laravel:form-requests

インストール後、Claude Code で/laravel:form-requestsを入力して読み込まれたか確認します。

詳細

フォームリクエストとバリデーション

バリデーションと認可を専用のフォームリクエストクラスに移します。コントローラーはオーケストレーションとドメインの意図に集中させます。

コマンド

# Create a request
sail artisan make:request UpdateProfileRequest      # or: php artisan make:request UpdateProfileRequest

# Use in controller method signature
public function update(UpdateProfileRequest $request) {
    $data = $request->validated();
    // ...
}

パターン

  • アクセス制御には authorize() を定義し、複雑なチェックにはポリシーを優先します
  • ルールオブジェクトを使用します:Rule::unique('users', 'email')->ignore($user->id)
  • ネストされた配列をバリデーションします:items.*.sku、addresses.home.city
  • オプションのフィールドには、sometimes ではなく nullable と具体的なルールを優先します
  • attributes() と messages() を使用して、属性名とメッセージを標準化します
  • 共通ルールはカスタムの Rule クラスまたはトレイトに集約します
  • 部分更新を意図する場合は、$request->safe()->only([...]) を返します

Laravel 13+

// Strict mode: reject undeclared input fields
use Illuminate\Foundation\Http\Attributes\FailOnUnknownFields;

#[FailOnUnknownFields]
class StoreUserRequest extends FormRequest { /* ... */ }

// Or globally (AppServiceProvider) — strict in non-production
FormRequest::failOnUnknownFields(! app()->isProduction());

// Validate arbitrary JSON payloads against a schema
use Illuminate\JsonSchema\Types\Type;

$request->validate([
    'data' => [Rule::jsonSchema(Type::object([
        'name' => Type::string()->required(),
        'age'  => Type::integer()->min(0),
    ]))],
]);

// Typed enum handling for optional input
$request->whenFilledEnum('status', Status::class, fn (Status $status) => /* ... */);
  • 開発環境/CI で厳格モードを有効にし、タイプミスやペイロードの不整合を早期に検出します。API コントラクトが厳格な場合を除き、本番環境では寛容な設定を維持します

テスト

  • エンドポイントの機能テストを行います:バリデーションエラーと成功時のフローを検証します
  • カスタムバリデーターとルールオブジェクトは、単体でユニットテストします

コメント