bakame/twig-domain-parser-extension

使用 PHP 域名解析器的 Twig 扩展。

dev-master / 1.x-dev 2018-12-06 10:39 UTC

This package is auto-updated.

Last update: 2024-09-07 00:42:45 UTC


README

Build Status Total Downloads Latest Stable Version Software License

此软件包提供了用于 PHP 域名解析器 v5.4+ 的 Twig 扩展。

系统要求

您需要

  • PHP >= 7.1.0 但建议使用最新稳定版本的 PHP

安装

$ composer require bakame/twig-domain-parser-extension

设置

use Bakame\Twig\Pdp\Extension;
use Pdp\Cache;
use Pdp\CurlHttpClient;
use Pdp\Manager;

$manager = new Manager(new Cache(), new CurlHttpClient(), '1 DAY');
$rules = $manager->getRules();
$topLevelDomains = $manager->getTLDs();

$twig->addExtension(new Extension($rules, $topLevelDomains));

由于 Pdp\Cache 类实现了 PSR-16,您可以使用任何 PSR-16 兼容的缓存驱动程序。例如,您可以使用 Symfony 缓存组件

$ composer require symfony/cache
use Bakame\Twig\Pdp\Extension;
use Pdp\CurlHttpClient;
use Pdp\Manager;
use Symfony\Component\Cache\Simple\PDOCache;

$dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'dbuser', 'dbpass');
$cache = new PDOCache($dbh, 'psl', 86400);
$manager = new Manager($cache, new CurlHttpClient(), 86400);

$twig->addExtension(Extension::createFromManager($manager));

您可以直接从 Pdp\Manager 对象中使用 createFromManager 命名构造函数获取一个 Extension 实例。

使用方法

在 Twig 模板中操作域名对象

{% set host = 'www.食狮.公司.cn' %}
hostname: {{ resolve_domain(host) }} {#  www.食狮.公司.cn #}
subDomain : {{ resolve_domain(host).subDomain }} {#  www #}
registrableDomain : {{ resolve_domain(host).registrableDomain }} {#  食狮.公司.cn #}
publicSuffix : {{ resolve_domain(host).publicSuffix }} {#  公司.cn #}
isICANN : {{ resolve_domain(host).ICANN ? 'ok' : 'ko' }} {#  ok #}
isPrivate : {{ resolve_domain(host).private ? 'ok' : 'ko' }} {# ko #}
isKnown : {{ resolve_domain(host).known ? 'ok' : 'ko' }} {#  ok #}
ascii : {{ resolve_domain(host).toAscii }} {#  www.xn--85x722f.xn--55qx5d.cn #}
unicode : {{ resolve_domain(host).toUnicode }} {#  www.食狮.公司.cn #}
label : {{ resolve_domain(host).label(0) }} {# cn #}
publicSuffix : {{ resolve_domain('foo.github.io', constant('Pdp\\Rules::PRIVATE_DOMAINS')).publicSuffix }} {# github.io #}

resolve_domain 函数返回一个 Pdp\Domain 对象,您可以使用它来获取有关主机名的各种信息。返回的对象使用 Pdp\Rules::resolve 方法与 PSL 资源进行解析。这意味着您可以决定域名应该解析到哪个部分。

resolve_domain 参数包括

  • $host 一个标量或可字符串化的对象
  • $section:表示 PSL 中的一个部分的字符串
    • Rules::ICANN_DOMAINS:将域名解析到 PSL ICANN 部分
    • Rules::PRIVATE_DOMAINS:将域名解析到 PSL 私有部分

默认情况下,解析是针对具有最长公共后缀的部分进行的。

检测主机是否包含 IANA 顶级域名

hostname: {{ host is topLevelDomain ? 'ok' : 'ko' }} {# ok #}

topLevelDomain 测试函数会检查提交的域名是否包含已知的 IANA 顶级域名

贡献

欢迎贡献,并将完全归功于贡献者。请参阅 CONTRIBUTINGCONDUCT 了解详情。

测试

该库有一个

  • a PHPUnit 测试套件
  • 一个使用 PHP CS Fixer 的编码风格合规性测试套件。
  • 一个使用 PHPStan 的代码分析合规性测试套件。

要运行测试,请在项目文件夹中运行以下命令。

$ composer test

安全

如果您发现任何与安全相关的问题,请通过电子邮件 nyamsprod@gmail.com 而不是使用问题跟踪器来报告。

鸣谢

许可证

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