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

Laravel 8如何实现年龄小于18时对应文本框设为必填校验

Laravel 8 实现未成年人相关字段条件必填校验方案

方案1:使用表单请求类(官方推荐)

这种方式将校验逻辑和业务逻辑分离,可维护性更高,适合复杂表单场景。

  • 第一步:生成表单请求类
    执行Artisan命令:
    php artisan make:request UserStoreRequest
  • 第二步:编写校验规则
    打开app/Http/Requests/UserStoreRequest.php文件,编写如下代码:
    <?php
    
    namespace App\Http\Requests;
    
    use Illuminate\Foundation\Http\FormRequest;
    use Carbon\Carbon;
    
    class UserStoreRequest extends FormRequest
    {
        public function authorize()
        {
            // 不需要校验权限直接返回true,有权限判断逻辑可自行调整
            return true;
        }
    
        public function rules()
        {
            // 提前判断提交的用户是否为未成年人
            $isMinor = Carbon::parse($this->input('birth_date'))->age < 18;
    
            return [
                'birth_date' => 'required|date',
                // 未成年人时家长相关字段必填,成年后可空
                'parent_name' => $isMinor ? 'required|string|max:255' : 'nullable|string|max:255',
                'parent_phone' => $isMinor ? 'required|numeric' : 'nullable|numeric',
                'parent_id_card' => $isMinor ? 'required|string|size:18' : 'nullable|string|size:18',
                // 其他字段的校验规则继续补充即可
            ];
        }
    
        // 自定义错误提示(可选)
        public function messages()
        {
            return [
                'parent_name.required' => '未满18周岁的用户必须填写家长姓名',
                'parent_phone.required' => '未满18周岁的用户必须填写家长联系电话',
                'parent_id_card.required' => '未满18周岁的用户必须填写家长身份证号',
            ];
        }
    }
    
  • 第三步:控制器中调用
    在对应的控制器方法中直接注入该请求类即可自动完成校验:
    public function store(UserStoreRequest $request)
    {
        // 校验通过后拿到合法数据
        $validated = $request->validated();
        
        // 后续业务逻辑
    }
    

方案2:控制器内直接校验

如果表单逻辑比较简单,也可以直接在控制器中编写校验规则:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Carbon\Carbon;

class UserController extends Controller
{
    public function store(Request $request)
    {
        $isMinor = Carbon::parse($request->input('birth_date'))->age < 18;

        $validated = $request->validate([
            'birth_date' => 'required|date',
            'parent_name' => $isMinor ? 'required|string|max:255' : 'nullable|string|max:255',
            'parent_phone' => $isMinor ? 'required|numeric' : 'nullable|numeric',
            // 其他字段规则继续补充
        ], [
            'parent_name.required' => '未满18周岁的用户必须填写家长姓名',
            // 其他自定义提示继续补充
        ]);

        // 后续业务逻辑
    }
}

注意事项

  • 必须给birth_date字段加上date校验规则,确保提交的是合法日期格式,避免Carbon解析出错。
  • 如果需要兼容特定出生日期格式,可以在date规则后加date_format:Y-m-d等自定义格式规则。

内容的提问来源于stack exchange,提问作者Ankur Kathuria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:45:04