Symfony 验证约束 Assert\Date() 正在接受空字符串
Symfony Validation Constraint Assert\Date() is accepting empty string
在一个实体中 class 我定义了一个 属性 like
use Symfony\Component\Validator\Constraints as Assert;
class MyEntity
{
...
/**
* @Assert\Date()
*/
protected $date_of_birth;
...
}
在 FormType class 我使用 属性:
$builder
->add('date_of_birth',
DateType::class,
array(
'label' => 'Birthday',
'required' => true,
'translation_domain' => 'messages',
'widget' => 'single_text',
'html5' => false,
'data' => null,
'format' => $this->container->getParameter('date.format.icu'),
'attr' => array( 'class' => 'js-bootstrap-datepicker', 'placeholder' => 'DD.MM.YYYY' ),
)
)
;
在模板中,我输出抑制浏览器端验证的表单:
...
{{ form_start(form_a, {'attr': {'novalidate': 'novalidate'}}) }}
...
{{ form_label(form_a.date_of_birth) }}*
{{ form_errors(form_a.date_of_birth) }}
{{ form_widget(form_a.date_of_birth) }}
...
不幸的是,我在日期字段中输入的内容并不重要。我可以将它留空——它对验证器来说仍然可以。
NotBlank 约束虽然有效。
我想我在日期约束用法中遗漏了一些特定的东西?
这是预期的行为。
您没有遗漏任何东西,在日期约束的定义中没有 没有选项 使字段中的空值无效。
要使字段中的空值无效,您应该添加 NotBlank 约束,如您正确所述。
例如,这对于大多数其他验证器都是相同的,例如。 LengthValidator 将验证空字符串,即使 min >0。
参考文献:
- Similar answer
- Github issue
- Explanation
在一个实体中 class 我定义了一个 属性 like
use Symfony\Component\Validator\Constraints as Assert;
class MyEntity
{
...
/**
* @Assert\Date()
*/
protected $date_of_birth;
...
}
在 FormType class 我使用 属性:
$builder
->add('date_of_birth',
DateType::class,
array(
'label' => 'Birthday',
'required' => true,
'translation_domain' => 'messages',
'widget' => 'single_text',
'html5' => false,
'data' => null,
'format' => $this->container->getParameter('date.format.icu'),
'attr' => array( 'class' => 'js-bootstrap-datepicker', 'placeholder' => 'DD.MM.YYYY' ),
)
)
;
在模板中,我输出抑制浏览器端验证的表单:
...
{{ form_start(form_a, {'attr': {'novalidate': 'novalidate'}}) }}
...
{{ form_label(form_a.date_of_birth) }}*
{{ form_errors(form_a.date_of_birth) }}
{{ form_widget(form_a.date_of_birth) }}
...
不幸的是,我在日期字段中输入的内容并不重要。我可以将它留空——它对验证器来说仍然可以。 NotBlank 约束虽然有效。 我想我在日期约束用法中遗漏了一些特定的东西?
这是预期的行为。 您没有遗漏任何东西,在日期约束的定义中没有 没有选项 使字段中的空值无效。
要使字段中的空值无效,您应该添加 NotBlank 约束,如您正确所述。
例如,这对于大多数其他验证器都是相同的,例如。 LengthValidator 将验证空字符串,即使 min >0。
参考文献:
- Similar answer
- Github issue
- Explanation