Je travaille sur le formulaire de symfony que j'utilise select2 dans le champ pour une demande de paiement ajax, j'écouter l'événement PRE_SUBMIT
pour obtenir la liste des choix et donner aux choices
les optionsévénement formulaire Symfony: champ ChoiceType return null de façon inattendue
$opts = $config->getOptions();
$opts['choices'] = $listImages; //array of Image object
mais en cas PRE_SUBMIT
dans un var_dump i obtenir la valeur sélectionnée dans la forme, et l'utiliser dans la fermeture, et quand le champ persiste ont une valeur nulle, donc je fais un var_dump en cas POST_SUBMIT
le terrain avoir vraiment null comme valeur. Et je ne vois pas ce que je manqué
Mon FormType ci-dessous:
class ArticleType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('image', ChoiceType::class, array(
'expanded' => false,
'multiple' => false))
//other field
;
$formModifier = function (FormInterface $form, $image) use ($options) {
$listImages = $options['em']->getRepository('AlmotivAppBundle:Image')->findBy(array(
'id' => $image
));
if (!$listImages) {
$form->add('image')->addError(new FormError(
'Nous n\'avons pas p trouver l\'image, veuiller choisir une autre'
));
}
//die(var_dump($listImages)); //array of Image object
$config = $form->get('image')->getConfig();
$opts = $config->getOptions();
$opts['choices'] = $listImages;
$typeName = get_class($config->getType()->getInnerType());
$form->add('image', $typeName, $opts);
//die(var_dump($form->get('image')->getConfig()->getData())); //return null
};
$builder->get('image')->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$image = $event->getData();
//die(var_dump($image)); //return 10
$formModifier($event->getForm()->getParent(), $image);
}
);
Et j'utilise la v3.1 du cadre. Si vous avez besoin de plus, il suffit de demander.
pour le conserver dans le DB, le champ a une relation 'ManyToOne' donc je dois passer la valeur de l'option sélectionnée à Doctrine si je n'ai pas reçu d'erreur comme si la valeur n'était pas valide. Comme je peux le voir, vous ne pouvez pas modifier la configuration d'un champ après la construction, corrigez-moi si je me trompe, mais vous pouvez le remplacer, donc je l'ai fait et je sais que j'ai perdu les données. Maintenant, la question est Comment puis-je passer le 'imagesList' à la' $ options [choix] 'sans perdre le champ de données? –
et @JovanPerovic je ne pense pas re-ajouter le champ est une cause cause quand je passe le '$ event' à la fermeture et en faisant' $ event-> getData(); 'dans l'événement' POST_SUBMIT' j'ai reçu le soumis données, puis je rajoute le champ dans l'événement PRE_SUBMIT, et la chose mystère est quand faire $ event-> getForm(); 'dans POST_SUBMIT mon champ d'image a la valeur« null »et mon autre champ a la bonne valeur. Comment puis-je gérer cela? –
J'ai deux solutions pour gérer cela 1- Est de mettre les données dans le formulaire moi-même parce que je ne comprends pas pourquoi l'image a toujours une valeur nulle. 2- Utilise non mappé puis avec l'événement ajoute mon champ d'image avec les données soumises en type de texte (ce qui n'est pas la meilleure façon, je pense (car l'image a beaucoup de relation avec mon article), mais c'est la seule found) –