【发布时间】:2012-04-13 08:20:02
【问题描述】:
我在使用 Symfony2 验证器组件验证值以允许 NULL 但不允许空字符串时遇到问题。
我已将组件集成到 Silex 应用程序中,并使用 Property Constraint 目标来验证我的应用程序实体(不是 Doctrine 实体)的一些属性。
我已将此静态方法添加到我的 Entity 类以验证我的 Entity 上的 name 和 service_id,问题是当 service_id 为 NULL 时,NotBlank 约束启动并报告违规。
static public function loadValidatorMetadata(ClassMetadata $metadata)
{
// name should never be NULL or a blank string
$metadata->addPropertyConstraint('name', new Assert\NotNull());
$metadata->addPropertyConstraint('name', new Assert\NotBlank());
// service_id should either be a non-blank string or NULL
$metadata->addPropertyConstraint('service_id', new Assert\NotBlank());
}
底线,我正在研究如何允许 String 或 NULL 作为 service_id,但不允许空字符串。
PS:我也尝试过 MinLength(1) 约束,但不幸的是它允许空字符串。
【问题讨论】:
-
有一个 Null-Validator,但它也无济于事,因为只有 NULL 是有效的,即如果它是一个字符串(无论是否为空),它将被违反。为什么不编写自定义验证器?
-
自定义验证器确实是一种选择,但对我来说,这似乎是一个很常见的用例,很难相信开箱即用是不可能的。
-
我也是。事实上,这似乎甚至是错误的(或者至少是措辞)。对我来说 NotBlank 意味着应该对空白字符串进行验证。我不明白为什么约束将 null 视为空白值。
标签: php symfony validation silex