title: Cascade Validation not working on third layer of a form
body: <p>I have a form with 3 layers:
  First Layer is the container for the games:</p>
  
  <pre><code>class GameListType extends AbstractType {
  
      public function buildForm(FormBuilderInterface $builder, array $options) {
          $builder-&gt;add('games', 'collection', array(
              'required' =&gt; false,
              'allow_add' =&gt; true,
              'prototype' =&gt; true,
              'by_reference' =&gt; false,
              'type' =&gt; new GameBetType(),
          ))
          ;
      }
  
      public function setDefaultOptions(OptionsResolverInterface $resolver) {
          parent::setDefaultOptions($resolver);
          $resolver-&gt;setDefaults(array(
              'cascade_validation' =&gt; true,
          ));
      }  
  }
  </code></pre>
  
  <p>Second Layer is the Game itself, since i don't intend to change the game, but the bet on it, it only includes the form for the bet:</p>
  
  <pre><code>class GameBetType extends AbstractType {
  
      public function buildForm(FormBuilderInterface $builder, array $options) {   
          $builder-&gt;add('bet', new BetType());
      }
  
      public function setDefaultOptions(\Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver) {
          parent::setDefaultOptions($resolver);
          $resolver-&gt;setDefaults(array(
              'data_class' =&gt; 'Strego\TippBundle\Entity\Game',
              'cascade_validation' =&gt; true,
          ));
      }  
  }
  </code></pre>
  
  <p>And the third layer is the form for the bet:</p>
  
  <pre><code>class BetType extends AbstractType
  {
      public function buildForm(FormBuilderInterface $builder, array $options)
      {
  
          $builder-&gt;add('scoreT1' , 'text')
                  -&gt;add('scoreT2' , 'text');
          ;
      }
  
  
          public function setDefaultOptions(\Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver) {
          parent::setDefaultOptions($resolver);
          $resolver-&gt;setDefaults(array(
              'data_class' =&gt; 'Strego\TippBundle\Entity\Bet',
          ));
      }
  
  }
  </code></pre>
  
  <p>The issue is, that if there are validation constraints on the third level, the root form is always valid, but if I specifically validate the bet entity, I get the correct violation list in my controller:</p>
  
  <pre><code>// Form processing
  $form = $this-&gt;createForm(new GameListType(), $entity);
  $request = $this-&gt;getRequest();
  
  if ($request-&gt;getMethod() == 'POST') {
      $form-&gt;bind($request);
      $entity = $form-&gt;getData();
  
      if ($form-&gt;isValid()) {
          foreach ($entity-&gt;getGames() as $game) {                  
              if($game-&gt;hasBet()){
                  $bet = $game-&gt;getBet();
                  $bet-&gt;setUser($user);
                  $validator = $this-&gt;container-&gt;get('validator');
                  $errors = $validator-&gt;validate($bet);
                  var_dump($errors)  //&lt;-- i see there are errors
                  if(count($errors) == 0){
                      print($bet. ' gets persisted&lt;br&gt;');
                      $em-&gt;persist($bet);
                  } 
              }             
          }
      $em-&gt;flush();
      }
  }
  </code></pre>
  
  <p>Another issue is that even if I don't call <code>$em-&gt;persist($bet)</code> the entities gets persisted. I don't see the output described in the line </p>
  
  <pre><code>print($bet.'gets persisted&lt;br&gt;'); 
  </code></pre>
  
  <p>but the form input is still persisted to the database. </p>
  
  <p>So my two questions:</p>
  
  <ol>
  <li><p>How do I get the errors if the validation fails on the bet fails to the form (I don't want the whole form to be invalid, since there could only 1 out of 3 bets be invalid).</p></li>
  <li><p>Why is the bet persisted even if I dont call <code>$em-persist($bet)</code>, is this some magic that happens with the binding?</p></li>
  </ol>