laravel-mongodb数据验证规则文档:自动生成工具

laravel-mongodb数据验证规则文档:自动生成工具

【免费下载链接】laravel-mongodb A MongoDB based Eloquent model and Query builder for Laravel (Moloquent) 【免费下载链接】laravel-mongodb 项目地址: https://gitcode.com/gh_mirrors/la/laravel-mongodb

概述

laravel-mongodb提供了基于MongoDB的验证规则实现,通过src/Validation/DatabasePresenceVerifier.phpsrc/Validation/ValidationServiceProvider.php两个核心文件实现了与Laravel验证系统的集成。该工具允许开发者利用MongoDB的特性进行数据验证,包括唯一性检查、存在性验证等常见场景。

核心实现

服务注册

ValidationServiceProvider类继承自Laravel的基础验证服务提供者,通过重写registerPresenceVerifier方法注册了MongoDB特定的验证器:

protected function registerPresenceVerifier()
{
    $this->app->singleton('validation.presence', function ($app) {
        return new DatabasePresenceVerifier($app['db']);
    });
}

数据库存在性验证器

DatabasePresenceVerifier类提供了两个核心方法用于数据验证:

getCount方法

该方法用于检查集合中是否存在具有特定值的对象:

public function getCount($collection, $column, $value, $excludeId = null, $idColumn = null, array $extra = [])
{
    $query = $this->table($collection)->where($column, new Regex('^' . preg_quote($value) . '$', '/i'));

    if ($excludeId !== null && $excludeId !== 'NULL') {
        $query->where($idColumn ?: 'id', '<>', $excludeId);
    }

    foreach ($extra as $key => $extraValue) {
        $this->addWhere($query, $key, $extraValue);
    }

    return $query->count();
}
getMultiCount方法

该方法支持同时检查多个值的存在性:

public function getMultiCount($collection, $column, array $values, array $extra = [])
{
    // Nothing can match an empty array. Return early to avoid matching an empty string.
    if ($values === []) {
        return 0;
    }

    // Generates a regex like '/^(a|b|c)$/i' which can query multiple values
    $regex = new Regex('^(' . implode('|', array_map(preg_quote(...), $values)) . ')$', 'i');

    $query = $this->table($collection)->where($column, 'regex', $regex);

    foreach ($extra as $key => $extraValue) {
        $this->addWhere($query, $key, $extraValue);
    }

    return $query->count();
}

使用场景

唯一性验证

在Laravel表单验证规则中使用unique规则时,系统会自动调用DatabasePresenceVerifier的getCount方法:

$rules = [
    'email' => 'required|email|unique:users',
    'username' => 'required|unique:users,username',
];

存在性验证

使用exists规则验证数据存在性:

$rules = [
    'role_id' => 'required|exists:roles,_id',
    'status' => 'required|exists:statuses,name',
];

多值验证

通过自定义验证逻辑,可以利用getMultiCount方法实现多值验证:

// 验证tags字段中的所有值都存在于tags集合中
$validator = Validator::make($data, [
    'tags' => [
        'required',
        function ($attribute, $value, $fail) {
            $verifier = app('validation.presence');
            $count = $verifier->getMultiCount('tags', 'name', $value);
            
            if ($count !== count($value)) {
                $fail('One or more tags do not exist.');
            }
        },
    ],
]);

正则表达式实现

验证器使用MongoDB的Regex类实现模式匹配,确保验证规则与MongoDB的查询语法兼容:

// 单值匹配
new Regex('^' . preg_quote($value) . '$', '/i')

// 多值匹配
new Regex('^(' . implode('|', array_map(preg_quote(...), $values)) . ')$', 'i')

这种实现确保了验证规则的大小写不敏感,同时正确处理特殊字符。

扩展建议

  1. 增加对MongoDB特定数据类型的验证支持,如ObjectId、Date等
  2. 实现更复杂的验证规则,如地理位置验证、数组长度验证等
  3. 添加缓存机制提高验证性能,特别是在高频验证场景下
  4. 开发可视化的验证规则生成工具,降低使用门槛

【免费下载链接】laravel-mongodb A MongoDB based Eloquent model and Query builder for Laravel (Moloquent) 【免费下载链接】laravel-mongodb 项目地址: https://gitcode.com/gh_mirrors/la/laravel-mongodb

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值