You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel表单SELECT下拉字段设置required验证后不触发报错问题

问题原因
  • 核心原因是下拉框默认选项的值非空:你代码中默认的提示选项<option value="177">Select a category</option>的value属性值为177,用户未主动选择其他选项提交表单时,category_id字段会提交177这个有效值,满足required规则的非空要求,所以不会触发验证错误,自然没有反馈。
  • 次要潜在问题:错误样式的判断逻辑不规范:你给select元素添加is-invalid错误类时使用$errors->get('category_id')做判断,虽然无错误时返回的空数组会被判定为false,但更严谨的写法是使用$errors->has('category_id')直接判断该字段是否存在验证错误,避免特殊场景下判断异常。
解决方法

按以下步骤修改即可:

  1. 修改下拉框默认选项的value值为空,让未选择时提交空值触发required验证:
    将默认option改为:
    <option value="">Select a category</option>
    
  2. 优化错误类的判断逻辑,保证验证失败时能正确加载高亮样式:
    将select标签的class属性修改为:
    class="form-control {{ $errors->has('category_id') ? 'is-invalid' : '' }}"
    

如果你确实需要保留默认选项的value为177,可以将验证规则调整为如下配置,也能实现必填校验:

'category_id' => 'required|not_in:177',
完整修改后的代码示例
<div class="form-group">
   <label for="category-id">Category</label>
   <select id="category-id" class="form-control {{$errors->has('category_id') ? 'is-invalid' : ''}}" name="category_id">
      <option value="">Select a category</option>
      @foreach ($categories as $category)
      <option value="{{$category['id']}}">{{$category['title']}}</option>
      @endforeach
   </select>
   @if ($errors->has('category_id'))
      <div class="invalid-feedback"><strong>{{$errors->first('category_id')}}</strong></div>
   @endif
</div>

内容的提问来源于stack exchange,提问作者Md Nurul Afsar Pervez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 12:12:03