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?