Symfony DateType не может обработать нулевое значение, несмотря на ограничение NotBlank - PullRequest
0 голосов
/ 11 июля 2019

Я создаю форму с полем birthdate, которое должно быть заполнено:

    ->add('birthdate', DateType::class, [
        'widget' => 'single_text',
        'constraints' => [
            new NotBlank(['message' => 'The birthdate is missing']),
            new LessThanOrEqual([
                'value' => (new \DateTime('now'))->modify('-15 years'),
                'message' => 'Must be 15 or older.',
            ])
        ]
    ])

Форма сопоставлена ​​с Preregistration сущностью , свойство birthdate которой должноnot be null:

    /**
     * @ORM\Column(type="date")
     */
    private $birthdate;

Я "проверяю" форму и ее ограничения, добавляя атрибут novalidate HTML в пустую форму, чтобы увидеть, как внутренние проверкибудет действовать.Несмотря на ограничение NotBlank, я получаю эту ошибку:

InvalidArgumentException:
Ожидаемый аргумент типа "DateTimeInterface", "NULL", заданный в пути свойства "birthdate".


Исключение исчезает, когда я удаляю ключ widget из параметров поля birthdate (но мне нужно / я хочу использовать этот виджет).

Что может привести к тому, что ограничения будут "обойдены" ?

1 Ответ

0 голосов
/ 11 июля 2019

Я попробую следующее, удалив константы из типа формы и добавив их внутрь сущности.

и это пример того, как я использую формы без тега проверки

тип бланка:

->add(
            'birthdate',
            DateTimeType::class,
            [
                'label' => 'birthdate',
                'widget' => 'single_text',
                'format' => 'dd.MM.yyyy',
            ]

сущность:

   /**
     * @var DateTime $birthdate
     *
     * @ORM\Column(type="datetime")
     * @Assert\NotNull()
     */
    private $birthdate;

сеттеры и геттеры:

/**
 * Get birthdate
 *
 * @return DateTime
 */
public function getBirthdate(): ?DateTime
{
    return $this->birthdate;
}

/**
 * Set birthdate
 *
 * @param DateTime $birthdate
 *
 * @return $this
 */
public function setBirthdate($birthdate): self
{
    $this->birthdate = $birthdate;

    return $this;
}
...