mcpField
L
laravel:form-requests

laravel:form-requests

github.com/jpcaparas开发157146 次安装17 周前更新
代码仓库

关于 laravel:form-requests

为 Laravel 开发者提供表单请求与验证指南,建议将验证和授权逻辑放入专用 Form Request 类,减少控制器职责。还介绍嵌套数据规则、严格输入检查及相关测试。

主要功能

  1. 01在 Form Request 中集中验证
  2. 02通过 authorize 方法控制访问
  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
  • 对可选字段,优先使用 nullable + 特定规则,而不是 sometimes
  • 通过 attributes() 和 messages() 统一属性名称和消息
  • 在自定义 Rule 类或 trait 中集中管理通用规则
  • 需要部分更新时,返回 $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 契约要求严格,否则在生产环境中保持宽松

测试

  • 对端点进行功能测试:断言验证错误和成功流程
  • 单独对自定义验证器和规则对象进行单元测试

评论

支持 Markdown