2017-09-14 9 views
1

J'utilise l'écouteur d'événement pour modifier les données dynamiquement en fonction des entrées de l'utilisateur. Chaque fois que j'utilise les événements PRE_SET_DATA et PRE_SUBMIT pour définir les données et les champs. Voici l'exemple simple des actions de PRE_SUBMIT:Formulaire Symfony Écouteur d'événements pour les champs de collection

// Pre set share locations by share day 
if (array_key_exists('shares', $data)) { 
    foreach ($data['shares'] as $key => $share) { 
     if ($share['pickUpDay'] !== null) { 
      $shareType = $form->get('shares')->get($key); 

      $locations = $this->em->getRepository('AppBundle:Member\Location')->getLocationsByDay($client, $data['shares'][$key]['pickUpDay']); 
      $this->addLocationField($shareType, $locations); 
     } 
    } 
} 

question non ce que l'intérieur addLocationField fonction, il fonctionne bien.

Lorsque je fais $form->get('shares'), c'est mon champ de collection, alors j'ai besoin de ->get(child) de cette collection et de définir les données de champs et les choix directement à cet enfant. Par quand j'ajoute dynamiquement la collecte, Symfony indique l'erreur:

Child "n" does not exist.

Et ce problème ne se produit que lorsque je tente d'obtenir des données de nouvelle collection qui a été ajouté dynamiquement. Donc, je ne peux pas accéder à un champ de collection et modifier les choix, donc je reçois l'erreur que ma nouvelle valeur ne figure pas dans une liste de choix.

Intéressant que $data['shares'] ont toutes les données pour les nouveaux éléments de la collection, mais $form->get('shares') n'ai:

var_dump(count($event->getData()['shares'])) - return 1; 
var_dump(count($form->get('shares'))) - return 0; 

Est-ce que ça veut dire que mes œuvres PRE_SUBMIT avant la fonctionnalité de collecte Symfony se produisent?

Quelqu'un sait-il comment le réparer?

Répondre

0

Je sais que votre question est « vieux » et vous avez probablement trouvé une solution, mais vous étiez dans la bonne direction quand vous avez dit:

Is that mean that my PRE_SUBMIT works before Symfony collection functionality happen?

Votre nouvelle collection n'est pas encore reçu et ce n'est pas présent dans le modèle see this part of the doc

pour faire ce que vous voulez, vous devez utiliser the SUBMIT event

NB: vous ne pouvez pas ajouter un champ sur POST_SUBMIT