symfony 3.4 Ошибка типа: переданный аргумент 1 должен быть экземпляром DateTime, задано значение NULL,

В сущности дата-время декалируется:

 /**
 * @var \DateTime
 * @ORM\Column(name="task_date_start", type="datetime", nullable=true)
 */
 private $taskDateStart;

в виде

$builder->add('taskDateStart', DateType::class, [
    "widget" => "single_text",
    "html5" => false,
    "format" => "dd-MM-yyyy"  ,
    "attr" => ["class" => "js-datepicker"], 
    "required" => false                                                    
]);

у меня эта ошибка при вставке нуля в поле

Аргумент 1, переданный в ..., должен быть экземпляром DateTime, значение null задано


person Wassim Jied    schedule 16.02.2018    source источник
comment
Что такое ..., ваша сущность? Можете ли вы отредактировать свой пост и добавить свой установщик сущности? Обратите внимание, что вы должны использовать символ {} в редакторе для правильного форматирования кода (я сделал это для этого поста ;)).   -  person goto    schedule 16.02.2018
comment
Скорее всего у вас есть метод setTaskDateStart(\DateTime $taskDateStart), который не позволяет передать ему null.   -  person malarzm    schedule 16.02.2018


Ответы (2)


Проблема решилась модификацией сеттера (новый сеттер без прототипа):

 function setTaskDateStart(\DateTime $taskDateStart = null ) {
     $this->taskDateStart = $taskDateStart;
 }

стали

 function setTaskDateStart( $taskDateStart ) {
     $this->taskDateStart = $taskDateStart;
 }
person Wassim Jied    schedule 16.02.2018

Лучшее решение — позволить установить значение null и позволить проверке сообщить об ошибке.

/**
 * @var \DateTime
 * @ORM\Column(name="task_date_start", type="datetime", nullable=false)
 * @Assert\NotBlank()
 */
 private $taskDateStart;

а также

 function setTaskDateStart(?\DateTime $taskDateStart) {
     $this->taskDateStart = $taskDateStart;
 }
person pevac    schedule 21.05.2018