如何在Collection表单类型上应用验证规则?

时间:2014-10-21 17:54:47

标签: php validation symfony webforms

例如,当我们修改PersonType时,我们有两个实体,一个Car和一个Person:

$builder
    ->add('email')
    ->add('cars','collection',array(
        'type' => new CarType(),
        'allow_add' => true,
        'allow_delete' => true,
        'by_reference' => false,
    ))
    ->add('submit','submit')

并为Car实体制定以下验证规则:

Mtm\AppBundle\Entity\Car:
properties:
  file:
    - File:
      maxSize: 100k
      mimeTypes: [application/pdf, application/x-pdf]
      mimeTypesMessage: Please upload a valid PDF

验证规则不适用于表单,它只对其进行html5验证,而不是服务器端验证。

知道我该怎么办?

2 个答案:

答案 0 :(得分:1)

cascade_validation属性设置为true:

$builder
    ->add('email')
    ->add('cars','collection',array(
        'type' => new CarType(),
        'allow_add' => true,
        'allow_delete' => true,
        'by_reference' => false,
        'cascade_validation' => true
    ))
    ->add('submit','submit')

http://symfony.com/doc/current/reference/forms/types/collection.html#cascade-validation

答案 1 :(得分:0)

工作解决方案如下:

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Mtm\AppBundle\Entity\Person',
        'cascade_validation' => true,
    ));
}

我必须在defaultOptions中添加它。

Thx到dmnptr提供了找到正确答案的方法。