hampel / tlds
从IANA获取顶级域名(TLD)的最新列表,并提供用于验证TLDs的Laravel类
Requires
- php: >=7.3
- hampel/validate: ~2.2
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- guzzlehttp/guzzle: ^7.0
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^10.0
README
此包提供了一种检索由IANA管理的当前顶级域名(TLDs)列表的机制。它还提供了几个Laravel类来验证域名和TLDs。
作者:Simon Hampel
兼容性
- Laravel 9.x - 使用 hampel/tlds 1.10.x
- Laravel 10.x - 使用 hampel/tlds 2.x
- Laravel 11.x - 使用 hampel/tlds 2.1.x
安装
使用composer安装,运行以下命令
composer require hampel/tlds
如果您想更改默认的Tlds配置,首先使用以下命令发布它
$ php artisan vendor:publish --provider="Hampel\Tlds\TldServiceProvider"
配置文件可以在 config/tlds.php
中找到。
配置
有关配置选项的详细信息,请参阅配置文件。
tlds.cache.expiry - 设置缓存过期时间(秒)
tlds.cache.key - 设置用于在缓存中存储TLD数据的键
tlds.source - 设置为 'url' 以从网站(例如IANA)检索数据,设置为 'filesystem' 以从本地源检索数据(您需要配置Laravel文件系统 'disk' 以使此功能正常工作)
tlds.url - 如果源设置为 'url',则输入用于检索数据的URL。默认情况下,此设置为IANA源文件
tlds.disk - 如果源设置为 'filesystem',则输入在 'filesystems.disks' 配置选项中配置的Laravel文件系统磁盘的名称
tlds.path - 如果源设置为 'filesystem',则输入相对 'filesystems.disks' 配置选项中配置的磁盘根路径的数据文件路径(例如,'tlds/tlds-alpha-by-domain.txt')
使用
Tlds包提供了一种简单的方法来读取包含顶级域名列表的数据文件,每行一个,并返回一个数据数组。这些数据可以可选地缓存以提高性能。
数据文件可以直接从互联网数字分配机构(IANA)网站、使用Guzzle或如果您有其他来源或希望自行获取数据文件然后从本地源读取,可以重新配置Tlds包以从任何Laravel支持的文件系统(使用Flysystem)读取数据文件。
还有一个可用的artisan命令,可以用于获取最新数据文件以刷新缓存。这对于使用cron作业或类似工具自动化数据检索非常理想。
最简单的方式是使用外观调用包
// get a "fresh" copy of the TLD list $tld_array = Tlds::fresh(); // or if you prefer to not use Facades: $tld_array = $app->make(Hampel\Tlds\TldManager::class)->fresh();
这返回一个“新鲜”的数据副本(绕过缓存)作为一个TLDs数组。
从缓存中获取TLD数组或当缓存数据过期时自动更新
// get the TLD list from the cache (or update the cache if it has expired) $tld_array = Tlds::get(); // if you prefer to manage the cache yourself, you can do this all manually, for example: if (Cache::has(Config::get('tlds.cache.key')) { $tld_array = Cache::get(Config::get('tlds.cache.key')); } else { Cache::put(Config::get('tlds.cache.key'), Tlds::fresh(), Config::get('tlds.cache.expiry')); }
运行artisan控制台命令以更新缓存
$ php artisan tld:update Added 725 TLDs to the TLD Cache
验证器
此包为Laravel v10.x及更高版本添加了额外的验证器 - 请参阅Laravel 文档 - 验证以获取通用使用说明。
域名
验证字段必须是有效的域名。顶级域名(TLD)将针对所有可接受TLDs的列表进行检查,包括使用punycode表示法的国际化域名
示例
use Hampel\Tlds\Validation\Domain; // valid values: example.com; example.au // invalid values: example.invalid-tld $request->validate([ 'domain' => ['required', 'string', new Domain], ]);
DomainIn([<TLDs数组>])
正在验证的字段必须是一个有效的域名,其顶级域名(TLD)必须来自指定的选项之一
示例
use Hampel\Tlds\Validation\DomainIn; // valid values: example.com; example.net // invalid values: example.co; example.au (not in specified list of domain TLDs) $request->validate([ 'domain' => ['required', 'string', new DomainIn(['com', 'net')], ]);
顶级域名(TLD)
正在验证的字段必须以有效的顶级域名(TLD)结束。TLD将与所有可接受的TLD列表进行核对,包括使用punycode表示法的国际化域名。
如果提供值中不包含点号,则假定它仅是一个顶级域名(TLD)。
如果值中包含点号,则仅验证最后一个点号之后的部分。
示例
use Hampel\Tlds\Validation\Tld; // valid values: example.com; com; net (either a domain with a valid TLD, or a string that is itself a valid TLD) // invalid values: example.invalid-tld; something-not-a-tld $request->validate([ 'domain' => ['required', 'string', new Tld], ]);
TldIn([
正在验证的字段必须以指定的选项之一中的顶级域名(TLD)结束。
如果提供值中不包含点号,则假定它仅是一个顶级域名(TLD)。
如果值中包含点号,则仅验证最后一个点号之后的部分。
示例
use Hampel\Tlds\Validation\TldIn; // valid values: example.com; example.net; com; net // invalid values: example.co; org (not in specified list of domain TLDs) $request->validate([ 'domain' => ['required', 'string', new TldIn(['com', 'net'])], ]);