h-farm / laravel-email-domain-rule
Laravel 邮箱域名规则
3.2.0
2024-04-05 14:33 UTC
Requires
- php: ^8.0
- illuminate/contracts: ^9.0|^10.0|^11.0
- illuminate/database: ^9.0|^10.0|^11.0
- illuminate/support: ^9.0|^10.0|^11.0
- spatie/laravel-package-tools: ^1.14.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.4
- nunomaduro/collision: ^6.0|^7.10.0|^8.1.1
- orchestra/testbench: ^7.0|^8.0|^9.0
- phpunit/phpunit: ^9.5|^10.5
- vimeo/psalm: ^4.20|^5.22
README
Laravel 邮箱域名规则
此包允许定义一组允许的电子邮件域名,并使用自定义规则验证任何用户注册表单。
安装
您可以通过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
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献指南。
安全漏洞
请查看我们的安全策略,了解如何报告安全漏洞。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。