关于 laravel:form-requests
为 Laravel 开发者提供表单请求与验证指南,建议将验证和授权逻辑放入专用 Form Request 类,减少控制器职责。还介绍嵌套数据规则、严格输入检查及相关测试。
主要功能
- 01在 Form Request 中集中验证
- 02通过 authorize 方法控制访问
- 03验证嵌套数组字段
- 04自定义规则与错误消息
- 05拒绝未声明的输入字段
适用场景
- 01将控制器验证移至专用请求类
- 02验证嵌套表单数据
- 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