bakame / twig-domain-parser-extension
使用 PHP 域名解析器的 Twig 扩展。
dev-master / 1.x-dev
2018-12-06 10:39 UTC
Requires
- php: >=7.1.0
- jeremykendall/php-domain-parser: ^5.4
- twig/twig: ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.7
- phpstan/phpstan: ^0.10
- phpstan/phpstan-phpunit: ^0.10
- phpstan/phpstan-strict-rules: ^0.10
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-09-07 00:42:45 UTC
README
此软件包提供了用于 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 顶级域名
贡献
欢迎贡献,并将完全归功于贡献者。请参阅 CONTRIBUTING 和 CONDUCT 了解详情。
测试
该库有一个
- a PHPUnit 测试套件
- 一个使用 PHP CS Fixer 的编码风格合规性测试套件。
- 一个使用 PHPStan 的代码分析合规性测试套件。
要运行测试,请在项目文件夹中运行以下命令。
$ composer test
安全
如果您发现任何与安全相关的问题,请通过电子邮件 nyamsprod@gmail.com 而不是使用问题跟踪器来报告。
鸣谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可文件。