Issue 1:
When using a validation group for a specific attribute the error when the validation fails is shown twelve times. Any idea why this happens?

In Opportunity.php

...
/**
*
* @ORM\Column(type="text", nullable=true)
* @Assert\NotBlank(groups={"complete_opportunity"}, message="Please enter a description for this internship")
* @Assert\Type(type="string")
*/
protected $description;

/**
*
* @ORM\Column(type="text", nullable=true)
* @Assert\NotNull(groups={"complete_opportunity"}, message="Please give more information about the selection procedure")
* @Assert\Type(type="string")
*/
protected $selectionProcedure;
...

In OpportunityCompleteFormType.php

...
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Vendor\ProjectBundle\Entity\Opportunity',
'validation_groups' => array('complete_opportunity'),
));
}

...

Output of $form->getErrors()

Array
(
[0] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[1] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[2] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[3] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[4] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[5] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[6] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[7] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[8] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[9] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[10] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[11] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[12] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[13] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[14] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[15] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[16] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[17] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[18] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[19] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[20] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[21] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[22] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[23] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

)

Issue 2:
I'm using a validation group to allow creation of a quick opportunity with only a title and later a complete form. I've specified a "complete_opportunity" validation group with annotations:

**
* @ORM\Entity
* @ORM\Table(name="opportunities")
*/
class Opportunity
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
*
* @ORM\Column(type="string", length=255)
* @Assert\NotNull()
* @Assert\Type(type="string")
*/
protected $title;

/**
*
* @ORM\Column(type="text", nullable=true)
* @Assert\NotBlank(groups={"complete_opportunity"}, message="Please enter a description for this internship")
* @Assert\Type(type="string")
*/
protected $description;

/**
*
* @ORM\Column(type="text", nullable=true)
* @Assert\NotNull(groups={"complete_opportunity"}, message="Please give more information about the selection procedure")
* @Assert\Type(type="string")
*/
protected $selectionProcedure;
....

If I don't specify a validation group $form->getErrors() gives me this (when I remove the title for example:

Array
(
[0] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a title.
[messageTemplate:protected] => Please enter a title
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

)

If I specify a validation group in the OpportunityCompleteFormType like this:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Project\ProjectBundle\Entity\Opportunity',
'validation_groups' => array('complete_opportunity'),
));
}

$form->getErrors() will give the same error multiple times:

Array
(
[0] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[1] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[2] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[3] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[4] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[5] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[6] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[7] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[8] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[9] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[10] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[11] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[12] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[13] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[14] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[15] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[16] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[17] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[18] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[19] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[20] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[21] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[22] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please enter a description for this internship
[messageTemplate:protected] => Please enter a description for this internship
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

[23] => Symfony\Component\Form\FormError Object
(
[message:Symfony\Component\Form\FormError:private] => Please give more information about the selection procedure
[messageTemplate:protected] => Please give more information about the selection procedure
[messageParameters:protected] => Array
(
)

[messagePluralization:protected] =>
)

)

I've tried with error_bubbling true and false for each element but to no avail.

Any ideas what's causing this?