D'autres propriétés de l'entité Type de Champ dans un formulaire dans Symfony2
Dans Symfony2, est-il un moyen de la carte plus de champs à partir d'une entité à l'option tag d'un sélectionnez le menu déroulant généré à partir d'un formulaire qui est basé sur une entité?
J'ai actuellement quelque chose comme:
$builder->add('creditcard', 'entity',
array( 'label' => 'Credit Card',
'required' => true,
'expanded' => false,
'class' => 'Acme\Bundle\Entity\CreditCard',
'property' => 'display_text',
'multiple' => false,
'query_builder' => function(\Acme\Bundle\Repository\CreditCardRepository $er) {
return $er->createQueryBuilder('b');
},
'mapped' => false,
));
Cela fonctionne bien, mais je voudrais générer quelque chose comme:
<option value="id" string_mapped_from_field1="value_of_field1">display_text</option>
Merci!
Vous devez vous connecter pour publier un commentaire.
Ok, dans le cas où quelqu'un arrive ici avec la même question, c'est ce que j'ai fait à la fin:
J'ai créé un type de champ personnalisé (voir http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html)
Puisqu'il nous est va être une entité de terrain en fin de compte, vous voulez ajouter:
Lors de l'utilisation sur le Formulaire:
objet est un nouvel ajout d'une propriété de l'entité qui contient l'ensemble de l'objet, alors j'ai ajouté de l'entité:
De cette façon, nous pouvons accéder à l'objet à partir du modèle, nous avons juste besoin de créer un nouveau modèle pour notre propre type de champ personnalisé:
Et de l'inscrire pour la brindille dans votre config.yml:
Pas sûr que c'est la meilleure solution, mais il fait l'affaire. Espérons que cela aide.
une autre solution est de déclarer une fonction __toString() sur CreditCardCharge entité
http://symfony.com/doc/current/reference/forms/types/entity.html#property
comme :
cette fonction doit retourner une chaîne de caractères, remplacer mon échantillon par votre logique
et de supprimer le "bien" option pour utiliser cette fonction par défaut
depuis Symfony
2.7
vous pouvez utiliserchoice_attr
Je l'ai corrigé en mettant cela dans mon empField.php :
(c'est à partir de : \vendor\symfony\symfony\src\Symfony\Bridge\Twig\Ressources\views\Form\form_div_layout.html.twig)
Et ça marche, je ne suis pas sûr que c'était la bonne chose à faire, mais oui il fonctionne.
J'ai essayé d'utiliser cet exemple avec mon entité, mais j'ai un problème. Il n'est pas détecter si une valeur est sélectionnée après le chargement de la page et il ne persistent après la soumission.
Je sens qu'il est lié à cette ligne :
Je ne suis pas sûr de comprendre ce que pour mettre à la place de : de données.creditcard_charges_id.
C'est quoi ressemble la mienne :
value="{{ choice.data.id }}"
Donc l'ensemble de la ligne est:<option value="{{ choice.data.id }}" {% if choice is selectedchoice(choice.data.id) %} selected="selected"{% endif %}>{{ choice.data.location.name[app.request.locale].value }}: {{ choice.data.name[app.request.locale].value }}</option>