La projection d'entité dans une Symfony2 champ de choix avec "optgroup"
Supposer une entité dans Symfony2 qui a un champ bestfriend
, qui est un User
entité sélectionnée à partir d'une liste de User
entités qui répondent à une exigence complexe.
Vous pouvez rendre ce champ dans un formulaire en précisant que c'est un entité de type de champ, c'est à dire:
$builder->add('bestfriend', 'entity', array(
'class' => 'AcmeHelloBundle:User',
'property' => 'username',
));
Ce champ de formulaire est rendu en tant que <select>
, où chacune des valeurs affichées est de la forme:
<option value="user_id">user_username</option>
Donc, on pourrait rendre le champ à l'aide de la <optgroup>
des balises pour mettre en évidence une telle particularité, les amis.
Suivant ce principe, j'ai créé un type de champ, à savoir FriendType
, qui crée le tableau de choix en cette réponse, qui est traduit comme suit:
$builder->add('bestfriend', new FriendType(...));
La FriendType
classe crée un <select>
organisé avec le même <option>
s mais organisée sous <optgroup>
s.
Ici, je viens de le problème! Lors de la soumission du formulaire, le cadre de reconnaître que le champ utilisateur n'est pas une instance de l'Utilisateur, mais c'est un entier. Comment puis-je laisser Symfony2 comprendre que l'int est l'identifiant d'une entité de type d'Utilisateur?
Obtenir un coup d'oeil à ma propre réponse.
OriginalL'auteur JeanValjean | 2012-11-12
Vous devez vous connecter pour publier un commentaire.
Voici ma solution.
Notez qu'il n'est pas mentionné dans le Symfony2 officiel docs, mais ça fonctionne! J'ai exploité le fait que l'entité type de champ est enfant de
choix
.Par conséquent, vous pouvez simplement passer le tableau de
choices
comme un param.où la fonction
getArrayOfEntities()
est une fonction que remplit la liste de choix avec les amis de mes amis, organisé par mes amis:Je sais que l'exemple peut-être pas de sens, mais il fonctionne...
PS: Vous avez besoin de passer l'entité gestionnaire de la laisser travailler...
OriginalL'auteur JeanValjean