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?

Honnêtement, je n'ai pas compris votre question, mais je pense qu'on peut le résoudre avec DataTransformer
Obtenir un coup d'oeil à ma propre réponse.

OriginalL'auteur JeanValjean | 2012-11-12