Symfony2表单 - 日期字段类型允许错误的日期

时间:2014-05-29 13:51:46

标签: php mysql forms date symfony

我有一个带有日期字段的表单如下:

/**
 * @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的情况下向用户提供此错误的建议?我怎么能避免这种行为?

1 个答案:

答案 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