kdn / yii2-domain-validator
为 Yii 2 的域名验证器。
Requires
- php: >=5.4.0
- ext-ctype: *
- ext-mbstring: *
- yiisoft/yii2: 2.*
Requires (Dev)
- phpunit/php-invoker: >=1.0 <4.0
- phpunit/phpunit: >=4.0 <10.0
Suggests
- ext-intl: this extension is needed for IDN support and to run all tests, otherwise some tests will be skipped
- ext-runkit: this extension is needed to run all tests, otherwise some tests will be skipped
README
Yii 2 的域名验证器。
要求
- PHP 5.4 或更高版本或 HHVM 3;
- Yii 框架 2;
- PHP 扩展
ctype
(字符类型检查)扩展(必需);mbstring
(多字节字符串)扩展(必需);intl
(国际化函数)扩展(可选,仅用于 IDN)。
安装
安装此扩展的首选方式是通过 Composer。
安装,可以运行
php composer.phar require kdn/yii2-domain-validator "*"
或者将以下内容添加到您的 composer.json
文件的 require
部分:
"kdn/yii2-domain-validator": "*"
使用方法
模型类示例
<?php namespace app\models; use kdn\yii2\validators\DomainValidator; use Yii; use yii\base\Model; class YourCustomModel extends Model { public $domain; public function rules() { return [ ['domain', DomainValidator::class], /* or with custom options: enable IDN and forbid URLs [ 'domain', DomainValidator::class, 'enableIDN' => true, 'allowURL' => false, ], */ ]; } public function attributeLabels() { return [ 'domain' => Yii::t('app', 'Domain Name'), ]; } }
请查看类 DomainValidator 中的公共属性以获取有关所有可用选项的信息,它们已全面文档化。在这里,我将仅突出非显而易见的事情。
-
默认情况下,验证器允许 URL,它将尝试解析 URL 然后验证域名。请注意,模型属性值本身不会更改。如果 URL 解析失败,则验证器将值视为域名。对于无效的 URL,验证器可能工作得并不完美。例如,用户输入为
http//example.com
,错误消息将是输入值的每个标签只能包含字母、数字和连字符
,尽管更好的方式是显示类似无效 URL
的内容。问题在于,如果字段允许 URL 和纯域名,并且输入值无效,那么无法可靠地确定用户想要http://example.com
还是http.example.com
。如果您根本不需要 URL,只需要独立的域名,您可以通过将allowURL
设置为false
来禁用此行为。如果您始终需要在 URL 中验证域名,而不是独立的域名,那么您应该在域名验证器之前添加 URL 验证器。public function rules() { return [ ['domain', 'url'], ['domain', DomainValidator::class], ]; }
-
默认情况下,域名标签的最小数量为 2。因此,
example
是无效的,example.com
是有效的。这不是域名标准的要求,标准声明域名example
是有效的。我添加此限制是为了实际原因,您可以通过使用labelNumberMin
选项禁用此限制或要求更多的域名标签。 -
尚未实现客户端验证,并且我没有这样的计划。如果您想在客户端实现域名验证,请考虑使用 AJAX 验证。
测试
确保您已安装所有 Composer 依赖项(在存储库的基本目录中运行 composer update
)。在存储库的基本目录中运行 PHPUnit。
./vendor/bin/phpunit
使用 Docker 进行测试
要求
启动并运行
-
为 Composer 提供凭证
cp auth.json.example \ auth.json
我建议在
auth.json
中设置 GitHub OAuth 令牌(也称为个人访问令牌),但是如果您对安全性有疑问,或者您懒得生成令牌,则可以替换auth.json
的内容为{}
,在大多数情况下这将有效。 -
为服务构建镜像
docker buildx bake --load --pull
或
docker buildx bake --load --pull --no-cache --progress plain
查看详细信息,请参阅
docker buildx bake --help
。 -
以后台模式启动服务
docker-compose up --detach 8.1
此命令将以 PHP 8.1 启动服务。也支持
7.4
、5.6
、8.1-alpine
、7.4-alpine
和5.6-alpine
,请参阅docker-compose.yml
中定义的服务。 -
在运行容器中执行测试
docker-compose exec 8.1 ./vendor/bin/phpunit
或者您可以在运行容器中启动一个 shell 并从其中执行测试
docker-compose exec 8.1 sh $ ./vendor/bin/phpunit
-
停止并删除
up
创建的容器docker-compose down
您可能还想删除与容器一起的卷
docker-compose down --volumes
向后兼容承诺
yii2-domain-validator 使用 Semver。这意味着版本带有 MAJOR.MINOR.PATCH 标签。只有新的主版本允许破坏向后兼容性 (BC)。
PHP 8 引入了 命名参数,这增加了包维护者的成本并减少了灵活性。yii2-domain-validator 中方法的参数名称不包括在我们的 BC 承诺中。