不建议再使用 URL validator 的 checkDNS 选项

Contributed by
Roland Franssen
in #25516.

在 Symfony 4.1 中,Url constraint 中的 checkDNS 选项(连同相关的 dnsMessage 选项) 已经被降格。该选项用于检查与给定URL相关联的host是否存在。它用到了 checkdnsrr() PHP 函数,现已不建议使用 (将于 Symfony 5.0 中删除),因为它的结果并不十分可靠。

并无替代品,因此如果你希望应用此种验证,创建一个自定义的 validation 然后使用 checkdnsrr() PHP 函数。

允许向 Expression validator 传入自定义值

Contributed by
Gabriel Ostrolucký
in #25504.

在 Symfony 4.1 中,Expression constraint 接受一个名为 values 的全新选项,用来传入任意值,并在你的表达式中使用:

1
2
3
4
5
6
7
8
use Symfony\Component\Validator\Constraints\Expression;
 
$constraint = new Expression([
    'expression' => 'value + custom == 2',
    'values' => [
        'custom' => 1,
    ],
]);

为 Locale validator 新增 canonicalize 选项

Contributed by
Javier Spagnoletti
in #22353.

在 Symfony 4.1 中,Locale constraint 定义了一个全新的名为 canonicalize 的布尔值选项。如果它是 true,则给定的 locale 值将在开始验证前,被转换为它的 canonical 形式。

例如 FR-fr.utf8 会被转换成 fr_FR, UZ-cYRL-uz 会被转换成 uz_Cyrl_UZ, 等等。

1
2
3
4
5
6
7
use Symfony\Component\Validator\Constraints as Assert;
 
class User
{
    /** @Assert\Locale(canonicalize = true) */
     protected $locale;
}

支持了不带 protocol 的 URL 验证

Contributed by
Peter Smeets
in #24308.

Url constraint 定义了 protocols 选项,用来配置 URLs (默认是 ['http', 'https']) 所允许的 protocols。在 Symfony 4.1 中我们添加了一个全新的布尔值选项,名为 relativeProtocol。如果是 true,不含 protocol (e.g. //example.com) 的 URLs也会通过验证:

1
2
3
4
5
6
7
use Symfony\Component\Validator\Constraints as Assert;
 
class Author
{
    /** @Assert\Url(relativeProtocol = true) */
     protected $bioUrl;
}