Laravel 9.1表单验证:两输入拼接后校验表单一列
解决方案
在Laravel表单请求中,你可以通过预处理请求数据+添加存在性验证规则来实现需求,具体步骤如下:
- 重写
prepareForValidation方法预处理数据
将resource_name和permission_type拼接为name字段并合并到请求中,这个方法会在验证规则执行前自动触发:
protected function prepareForValidation() { $this->merge([ 'name' => $this->input('resource_name') . '.' . $this->input('permission_type'), ]); }
- 完善验证规则
在rules方法中为name字段添加exists规则,检查拼接后的值是否存在于permission_types表的name列中:
public function rules() { return [ 'type' => ['required'], 'resource_name' => ['required', 'alpha', 'min:3', 'max:50'], 'permission_type' => ['required'], 'name' => ['exists:permission_types,name'], ]; }
- (可选)自定义错误提示
如果需要更友好的错误信息,可以重写messages方法:
public function messages() { return [ 'name.exists' => '该资源与权限类型的组合不存在于系统权限列表中', ]; }
逻辑说明
- 预处理阶段先完成字段拼接,确保验证时
name字段已存在 - 验证流程会先校验
resource_name、permission_type等字段的规则,只有这些字段验证通过后,才会触发name的存在性检查,完全符合你的需求
内容的提问来源于stack exchange,提问作者Wcan
相关产品推荐
相关产品推荐

