Laravel实现三个输入框至少填写一项的验证规则编写方法
Laravel 三字段至少填一项验证方案
你可以直接使用Laravel自带的required_without_all验证规则实现需求,该规则的作用是:当指定的所有其他字段都为空时,当前字段为必填项,刚好匹配「三个联系方式至少填一个」的要求。
方式1:直接在控制器中编写验证
use Illuminate\Http\Request; public function store(Request $request) { $validated = $request->validate([ 'telegram' => 'required_without_all:whatsapp,discord|nullable|string|max:255', 'whatsapp' => 'required_without_all:telegram,discord|nullable|string|max:255', 'discord' => 'required_without_all:telegram,whatsapp|nullable|string|max:255', ], [ // 统一三个字段的错误提示,避免重复提示 'telegram.required_without_all' => '至少需要填写Telegram、Whatsapp、Discord其中一种联系方式', 'whatsapp.required_without_all' => '至少需要填写Telegram、Whatsapp、Discord其中一种联系方式', 'discord.required_without_all' => '至少需要填写Telegram、Whatsapp、Discord其中一种联系方式', ]); // 后续业务逻辑 }
规则说明:每个字段后加nullable是为了保证只要三个字段中填了任意一个,剩下的两个字段允许为空。
方式2:表单请求类写法(更规范的项目写法)
如果你的项目使用单独的表单请求类做验证,可以按以下步骤实现:
- 生成请求类:执行命令
php artisan make:request ContactStoreRequest - 在
app/Http/Requests/ContactStoreRequest.php中编写规则:
public function rules() { return [ 'telegram' => 'required_without_all:whatsapp,discord|nullable|string|max:255', 'whatsapp' => 'required_without_all:telegram,discord|nullable|string|max:255', 'discord' => 'required_without_all:telegram,whatsapp|nullable|string|max:255', ]; } public function messages() { return [ '*.required_without_all' => '至少需要填写Telegram、Whatsapp、Discord其中一种联系方式', ]; }
- 控制器中直接注入请求类即可完成验证:
use App\Http\Requests\ContactStoreRequest; public function store(ContactStoreRequest $request) { $validated = $request->validated(); // 后续业务逻辑 }
你现有的Blade模板代码无需修改,后端验证规则已经可以覆盖需求,也可以额外加前端JS校验优化用户体验。
内容的提问来源于stack exchange,提问作者Hoda Kh
相关产品推荐
相关产品推荐

