Laravel 5.8:如何为表单显示的字段设置必填验证
解决方案:动态生成Laravel验证规则匹配表单显示逻辑
你的问题核心是要让后端验证规则和前端表单的显示逻辑保持一致——只有当字段在表单中渲染时,才要求必填,否则允许字段为空。可以通过动态构建验证规则数组来实现:
实现步骤
根据$user对象的字段状态(usr_name和usr_email是否为空),分别为mobile和email字段设置对应的验证规则:
// 初始化规则数组 $validationRules = []; // 若用户未设置邮箱(表单中显示邮箱输入框),则邮箱字段必填且唯一 if (empty($user->usr_email)) { $validationRules['email'] = 'required|unique:users,usr_email'; } else { $validationRules['email'] = 'nullable'; } // 若用户未设置用户名(表单中显示手机号输入框),则手机号字段必填且唯一 if (empty($user->usr_name)) { $validationRules['mobile'] = 'required|unique:users,usr_name'; } else { $validationRules['mobile'] = 'nullable'; } // 执行验证 $data = $request->validate($validationRules);
补充说明
如果这是用户信息更新操作,为了避免验证时把当前用户自己的字段判定为重复,需要给unique规则添加排除当前用户ID的条件:
// 邮箱的unique规则(更新场景) 'required|unique:users,usr_email,' . $user->id // 手机号的unique规则(更新场景) 'required|unique:users,usr_name,' . $user->id
前端代码小优化
你前端Blade里的输入框value赋值可以简化:
- 邮箱输入框:
value="{{ old('email', $user->usr_email) }}" - 手机号输入框:
value="{{ old('mobile', $user->member->mbr_mobile ?? '') }}"
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

