在 FormRequest 中写验证逻辑最稳妥,因其更易复用、测试,并天然支持授权;需通过 artisan 命令生成,实现 authorize()、rules()、messages() 和 attributes() 方法,控制器中类型提示即可自动验证。
直接在 FormRequest 里写验证逻辑是最稳妥的方式,比在控制器里用 validate() 更易复用、更易测试,也天然支持授权(authorize() 方法)。
怎么创建和注册自定义 FormRequest
用 Artisan 命令生成最省事:
php artisan make:request StorePostRequest
生成的类默认放在 app/Http/Requests/ 下。关键点有三个:
-
authorize()返回false会直接中断请求并返回 403,适合做权限判断(比如“只有作者才能编辑”) -
rules()必须返回数组,键是字段名,值是规则字符串或数组(如'title' => 'required|string|max:255'或'email' => ['required', 'email', 'unique:users']) - 别忘了在控制器方法参数中类型提示它,Laravel 会自动实例化并执行验证:
public function store(StorePostRequest $request)
怎么在 FormRequest 中复用已有规则或加条件验证
很多场景不是简单写死规则,比如“仅当 status 是 draft 时 title 可为空”,这时不能只靠数组规则表达: