maize-tech/laravel-email-domain-rule

Laravel 邮件域名规则

3.2.0 2024-04-05 14:33 UTC

This package is auto-updated.

Last update: 2024-09-08 16:24:37 UTC


README

Laravel 邮件域名规则

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此包允许定义一组允许的电子邮件域名,并通过自定义规则验证任何用户注册表单。

安装

您可以通过 composer 安装此包

composer require maize-tech/laravel-email-domain-rule

您可以使用以下命令发布和运行迁移

php artisan vendor:publish --provider="Maize\EmailDomainRule\EmailDomainRuleServiceProvider" --tag="email-domain-rule-migrations"
php artisan migrate

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="Maize\EmailDomainRule\EmailDomainRuleServiceProvider" --tag="email-domain-rule-config"

这是已发布配置文件的内容

return [

    /*
    |--------------------------------------------------------------------------
    | Email Domain model
    |--------------------------------------------------------------------------
    |
    | Here you may specify the fully qualified class name of the email domain model.
    |
    */

    'email_domain_model' => Maize\EmailDomainRule\Models\EmailDomain::class,

    /*
    |--------------------------------------------------------------------------
    | Email Domain wildcard
    |--------------------------------------------------------------------------
    |
    | Here you may specify the character used as wildcard for all email domains.
    |
    */

    'email_domain_wildcard' => '*',

    /*
    |--------------------------------------------------------------------------
    | Validation message
    |--------------------------------------------------------------------------
    |
    | Here you may specify the message thrown if the validation rule fails.
    |
    */

    'validation_message' => 'The selected :attribute does not have a valid domain.',
];

用法

基本用法

要使用此包,请运行迁移并填写应用程序接受的电子邮件域名列表。

然后,您只需添加自定义验证规则以进行验证,例如,用户注册表单。

use Maize\EmailDomainRule\EmailDomainRule;
use Illuminate\Support\Facades\Validator;

$email = 'my-email@example.com';

Validator::make([
    'email' => $email,
], [
    'email' => [
        'string',
        'email',
        new EmailDomainRule,
    ],
])->validated(); 

就这样!如果验证失败,Laravel 将通过验证输入并抛出错误消息来处理剩余部分。

通配符域名

如果需要,您可以可选地向 email_domains 数据库表添加通配符域名:自定义规则将处理其余部分。

默认通配符字符是星号(*),但您可以在 email_domain_wildcard 设置中自定义它。

use Maize\EmailDomainRule\EmailDomainRule;
use Maize\EmailDomainRule\Models\EmailDomain;
use Illuminate\Support\Facades\Validator;

EmailDomain::create(['domain' => '*.example.com']);

Validator::make([
    'email' => 'info@example.com',
], [
    'email' => ['string', 'email', new EmailDomainRule],
])->fails(); // returns true as the given domain is not in the list

Validator::make([
    'email' => 'info@subdomain.example.com',
], [
    'email' => ['string', 'email', new EmailDomainRule],
])->fails(); // returns false as the given domain matches the wildcard domain

模型定制

您还可以通过更改 email_domain_model 设置来覆盖默认的 EmailDomain 模型,以添加任何额外的字段。

当在一个数据库系统中处理多租户场景时,这可能很有用:在这种情况下,您只需将 tenant_id 列添加到迁移和模型类中,并对自定义模型应用全局作用域。

use Maize\EmailDomainRule\EmailDomainRule as BaseEmailDomain;
use Illuminate\Database\Eloquent\Builder;

class EmailDomain extends BaseEmailDomain
{
    protected $fillable = [
        'domain',
        'tenant_id',
    ];

    protected static function booted()
    {
        static::addGlobalScope('tenantAware', function (Builder $builder) {
            $builder->where('tenant_id', auth()->user()->tenant_id);
        });
    }
}

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

安全漏洞

请查阅 我们的安全策略 了解如何报告安全漏洞。

鸣谢

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件