kdn/yii2-domain-validator

为 Yii 2 的域名验证器。

1.1.4 2022-06-11 08:53 UTC

This package is auto-updated.

Last update: 2024-08-30 01:06:45 UTC


README

Yii 2 的域名验证器。

License Latest Stable Version Code Coverage Scrutinizer Code Quality Code Climate

要求

  • 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 中的公共属性以获取有关所有可用选项的信息,它们已全面文档化。在这里,我将仅突出非显而易见的事情。

  1. 默认情况下,验证器允许 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. 默认情况下,域名标签的最小数量为 2。因此,example 是无效的,example.com 是有效的。这不是域名标准的要求,标准声明域名 example 是有效的。我添加此限制是为了实际原因,您可以通过使用 labelNumberMin 选项禁用此限制或要求更多的域名标签。

  3. 尚未实现客户端验证,并且我没有这样的计划。如果您想在客户端实现域名验证,请考虑使用 AJAX 验证

测试

确保您已安装所有 Composer 依赖项(在存储库的基本目录中运行 composer update)。在存储库的基本目录中运行 PHPUnit。

./vendor/bin/phpunit

使用 Docker 进行测试

要求

  • Docker >= 19.03.0 (安装);
  • Docker Compose >= 1.25.5 (安装);
  • Docker 插件

启动并运行

  1. 为 Composer 提供凭证

    cp auth.json.example \
        auth.json

    我建议在 auth.json 中设置 GitHub OAuth 令牌(也称为个人访问令牌),但是如果您对安全性有疑问,或者您懒得生成令牌,则可以替换 auth.json 的内容为 {},在大多数情况下这将有效。

  2. 为服务构建镜像

    docker buildx bake --load --pull

    docker buildx bake --load --pull --no-cache --progress plain

    查看详细信息,请参阅 docker buildx bake --help

  3. 以后台模式启动服务

    docker-compose up --detach 8.1

    此命令将以 PHP 8.1 启动服务。也支持 7.45.68.1-alpine7.4-alpine5.6-alpine,请参阅 docker-compose.yml 中定义的服务。

  4. 在运行容器中执行测试

    docker-compose exec 8.1 ./vendor/bin/phpunit

    或者您可以在运行容器中启动一个 shell 并从其中执行测试

    docker-compose exec 8.1 sh
    $ ./vendor/bin/phpunit
  5. 停止并删除 up 创建的容器

    docker-compose down

    您可能还想删除与容器一起的卷

    docker-compose down --volumes

向后兼容承诺

yii2-domain-validator 使用 Semver。这意味着版本带有 MAJOR.MINOR.PATCH 标签。只有新的主版本允许破坏向后兼容性 (BC)。

PHP 8 引入了 命名参数,这增加了包维护者的成本并减少了灵活性。yii2-domain-validator 中方法的参数名称不包括在我们的 BC 承诺中。