我有一个带有日期字段的表单如下:
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text', array('required' => false, 'label' => 'name'))
->add('phone', 'text', array('required' => false, 'label' => 'phone'))
->add('email', 'text', array('required' => false, 'label' => 'email'))
->add('nextRevision', 'date', array(
'input' => 'datetime',
'widget' => 'single_text',
'format' => 'yyyy-MM-dd',
'required' => false,
'label' => 'nextRevision'
))
}
当表单以HTML呈现时,如果我引入无效日期并发送表单,则会显示错误消息“此值无效”。显示,但如果我引入类似20144-03-23的日期,表单被接受为有效,没有显示错误消息但显示的日期是0002-12-02,并且在MySQL数据库中,日期保存为0000-00-00
如果在添加字段时指定格式,为什么接受此格式?这是Symfony2表单验证器的错误吗?有没有办法在不使用JavaScript的情况下向用户提供此错误的建议?我怎么能避免这种行为?
答案 0 :(得分:1)
您似乎没有为此字段添加任何约束。因此,Symfony没有进行健全性检查。向该字段添加约束的一种方法如下:
$builder->add('nextRevision', 'date', array(
'input' => 'datetime',
'widget' => 'single_text',
'format' => 'yyyy-MM-dd',
'required' => false,
'label' => 'nextRevision' ,
'constraints' => array( new Date() )));
这将检查输入的日期是否符合实际日期。如果留空,则验证不会启动。
请参阅此处的文档: http://symfony.com/doc/current/reference/constraints/Date.html