2017-02-21 250 views
1

我有這樣的DateType:Symfony的形式DateType驗證

$builder 
    ->add('date', DateType::class, array(
     'widget' => 'single_text', 
     'format' => 'dd/MM/yyyy', 
     "required"=>true, 
     'label' => "jour.date")) 

當提交的日期是空的形式,也沒有任何問題。它成功地通過

if ($form->isValid()) 
控制器

,並錯誤終於彈出與

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'date' cannot be null 

,因爲這不能爲空的查詢失敗。但是我希望它返回錯誤,並且在日期爲空時不讓表單驗證!

按照要求,實體:提前

/** 
* @var \DateTime 
* 
* @ORM\Column(name="date", type="datetime") 
*/ 
private $date; 

感謝。

+0

你能告訴我們你的實體的代碼? – Veve

+0

你確定它是通過isValid沒有日期嗎?我將你的代碼複製到FormBuilder的一個新實例中,然後執行'submit([])',然後是'isValid()'返回false。 – mickadoo

+1

@mickadoo你應該發佈這個答案。不提交表單是一個很好的錯誤絆倒 – Joshua

回答

1

symfony docs上所需的選項

這是驗證膚淺的和獨立的。充其量,如果你讓Symfony猜到你的字段類型,那麼這個選項的值將會從你的驗證信息中猜出 。

當你調用窗體是有效的,它依賴驗證器服務和實體驗證映射來驗證你的實體。

你需要這個constraint設置它需要

+0

完美,謝謝! –

0

你必須改變:

$builder 
->add('date', DateType::class, array(
    'widget' => 'single_text', 
    'format' => 'dd/MM/yyyy', 
    "required"=>true, 
    'label' => "jour.date")) 

TO:

$builder 
->add('date', DateTimeType::class, array(
    'widget' => 'single_text', 
    'format' => 'dd/MM/yyyy', 
    "required"=>true, 
    'label' => "jour.date")) 
+0

嘿,謝謝你的回答,但它沒有奏效。它仍然通過驗證沒有任何問題。這種類型更精確,但我仍然保留它 –