2017-02-21 254 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

嘿,谢谢你的回答,但它没有奏效。它仍然通过验证没有任何问题。这种类型更精确,但我仍然保留它 –