Symfony Validation Constraint Assert \ Date()接受空字符串

问题描述 投票:0回答:1

在Entity类中,我定义了一个属性

use Symfony\Component\Validator\Constraints as Assert;

class MyEntity
{
    ...

    /**
     * @Assert\Date()
     */
    protected $date_of_birth;

    ...
}

在FormType类中,我使用属性:

$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 Constraint虽然有效。我想我错过了约会约束用法中的特定内容?

symfony validation constraints symfony-3.3 symfony3.x
1个回答
1
投票

这是预期的行为。您没有遗漏任何内容,Date约束的定义中没有选项可以使字段中的空值无效。

要使字段中的空值无效,您应该在正确指出时添加NotBlank约束。

这是一行:code for DateValidator

例如,对于大多数其他验证器,这是相同的,例如。 LengthValidator将验证空字符串,即使min> 0。

参考文献:

  1. Similar answer
  2. Github issue
  3. Explanation
© www.soinside.com 2019 - 2024. All rights reserved.