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

Laravel如何实现非必填4位数字pin码的Request验证与默认值配置

Laravel 实现Pin码验证+默认值落库方案

1. 设置表单验证规则

不管你是在控制器内直接调用validate()方法,还是单独创建表单请求类,给pin字段配置以下规则即可:

'pin' => 'nullable|digits:4'

规则说明:

  • nullable:标记字段为非必填,允许不传值、传空内容,不会触发必填拦截
  • digits:4:只要字段携带了非空值,就自动校验值必须为4位纯整数,123a、123、12345、12.3这类不符合格式的内容会直接返回校验错误,无需额外写正则

如果是用独立表单请求类,rules()方法示例:

public function rules()
{
    return [
        // 其余字段的验证规则...
        'pin' => 'nullable|digits:4',
    ];
}

2. 实现空值默认存1111

两种常用方案选其一即可:

方案一:控制器层处理校验后数据

在拿到校验通过的数据后,手动补全空值的默认值,逻辑直观好调整:

public function store(PinFormRequest $request)
{
    $validatedData = $request->validated();
    // pin为空时设置默认值
    if (empty($validatedData['pin'])) {
        $validatedData['pin'] = '1111';
    }
    // 正常调用模型创建数据即可
    PinModel::create($validatedData);
    // 后续返回、跳转逻辑...
}

方案二:数据库默认值+请求预处理

一劳永逸,避免多个入口写模型创建逻辑时漏设默认值:

  1. 先给对应表的pin字段设置数据库默认值,迁移文件字段定义示例:
    $table->string('pin', 4)->default('1111');
    
    写完执行php artisan migrate生效。
  2. 在表单请求类里加预处理方法,把空值的pin字段直接从请求中移除,这样存库时不会传空值覆盖数据库默认配置:
    protected function prepareForValidation()
    {
        if ($this->pin === '') {
            $this->request->remove('pin');
        }
    }
    

注意不要用numeric规则替代digits:4,numeric允许传入小数、负数,且不会校验固定长度,不符合4位纯数字的校验要求。


内容的提问来源于stack exchange,提问作者Hashir Hamza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:18:22