hampel/tlds

从IANA获取顶级域名(TLD)的最新列表,并提供用于验证TLDs的Laravel类

2.1.0 2024-05-08 08:00 UTC

This package is auto-updated.

Last update: 2024-09-08 09:01:58 UTC


README

Latest Version on Packagist Total Downloads Open Issues License

此包提供了一种检索由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'])],
]);