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

Laravel唯一验证需追加后缀:验证带.test.co.uk的域名唯一性

Laravel验证时自动拼接域名后缀检查唯一性的便捷方案

这个场景我做多租户项目时也碰到过,Laravel提供了几种简洁的方式解决,不用写复杂逻辑,分享两个最实用的方法:

方法一:预处理输入字段(推荐,适合需要存储完整域名的场景)

你可以在继承FormRequest的请求类里重写prepareForValidation方法,自动把用户输入的前缀和.test.co.uk拼接好,后续验证和存储直接用完整域名:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class DomainStoreRequest extends FormRequest
{
    // 授权逻辑(如果需要)
    public function authorize()
    {
        return true;
    }

    // 预处理输入,拼接完整域名
    protected function prepareForValidation()
    {
        $this->merge([
            'url' => $this->input('url') . '.test.co.uk',
        ]);
    }

    public function rules()
    {
        return [
            'url' => 'required|string|unique:domains,domain',
        ];
    }
}

这样验证时会直接检查拼接后的完整域名是否重复,而且后续从请求中取$request->url时,拿到的就是johnsmith.test.co.uk这种完整值,直接存入数据库即可。

方法二:自定义Unique查询规则(适合需要保留原始前缀输入的场景)

如果后续逻辑还需要用到用户输入的原始前缀,不想修改请求数据,可以用Rule::unique配合闭包动态拼接后缀做验证:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class DomainStoreRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'url' => [
                'required',
                'string',
                Rule::unique('domains', 'domain')->where(function ($query) {
                    $fullDomain = $this->input('url') . '.test.co.uk';
                    return $query->where('domain', $fullDomain);
                }),
            ],
        ];
    }
}

这种方式不会改动请求里的原始url值,仅在验证唯一性时检查数据库中是否存在拼接后的完整域名。

额外提示:更新场景兼容

如果这个请求同时用于创建和更新域名,更新时需要排除当前记录本身,可以给Rule::unique追加ignore方法:

Rule::unique('domains', 'domain')
    ->where(fn ($query) => $query->where('domain', $fullDomain))
    ->ignore($this->route('domain')) // 假设路由参数是域名模型或ID

这样更新时就不会把当前记录判定为重复项了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:42:37