Laravel中如何验证请求数组内的email和role_id字段
Laravel数组字段验证方案
基础验证写法(控制器内直接验证)
你可以直接在控制器中通过validate方法配合*通配符验证数组内的每个子元素字段:
public function store(Request $request) { $validated = $request->validate([ '*' => 'required|array:email,role_id', // 限制每个子项只能包含email、role_id两个字段 '*.email' => 'required|email:rfc,dns', // 验证邮箱格式,可按需加unique:users等规则 '*.role_id' => 'required|integer|exists:roles,id' // 验证角色ID必须存在于roles表 ]); // 验证通过后处理业务逻辑 }
规范写法(表单请求验证类)
如果验证逻辑复杂,推荐用Laravel的表单请求类统一管理验证规则:
- 执行命令生成请求类
php artisan make:request BulkAssignRoleRequest
- 在生成的
app/Http/Requests/BulkAssignRoleRequest.php中定义规则和错误提示
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class BulkAssignRoleRequest extends FormRequest { public function authorize() { // 这里按需设置权限校验,不需要就返回true return true; } public function rules() { return [ '*' => 'required|array:email,role_id', '*.email' => 'required|email:rfc,dns', '*.role_id' => 'required|integer|exists:roles,id' ]; } // 自定义错误提示,可选 public function messages() { return [ '*.email.required' => '第:position条数据的邮箱不能为空', '*.email.email' => '第:position条数据的邮箱格式不正确', '*.role_id.required' => '第:position条数据的角色ID不能为空', '*.role_id.exists' => '第:position条数据的角色ID不存在', ]; } }
- 控制器中注入请求类即可自动完成验证
use App\Http\Requests\BulkAssignRoleRequest; public function store(BulkAssignRoleRequest $request) { $validated = $request->validated(); // 后续业务逻辑 }
内容的提问来源于stack exchange,提问作者etranz
相关产品推荐
相关产品推荐

