Symfony2 - Set de sélectionner une valeur pour le champ entity
Je suis en train de définir une valeur choisie à l'intérieur d'un champ entity. Conformément à de nombreuses discussions que j'ai vu sur ce sujet, j'ai essayé de définir le data
option, mais cela ne permet pas de sélectionner les valeurs par défaut:
class EventType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('place', 'entity', array(
'class' => 'RoyalMovePhotoBundle:Place',
'property' => 'name',
'empty_value' => "Choisissez un club",
'mapped' => false,
'property_path' => false,
'data' => 2
))
->add('begin')
->add('end')
->add('title')
->add('description')
;
}
//...
}
Par la recherche de plus j'ai constaté que certaines personnes avaient à désactiver la forme de mapping de l'entité. Qui semble logique, j'ai donc essayé d'ajouter 'mapped' => false
pour les options, sans succès...
Si cela peut aider, voici mon controller:
class EventController extends Controller
{
//...
public function addAction()
{
$request = $this->getRequest();
$em = $this->getDoctrine()->getManager();
$event = new Event();
$form = $this->createForm(new EventType(), $event);
$formHandler = new EventHandler($form, $request, $em);
if($formHandler->process()) {
$this->get('session')->getFlashBag()->add('success', "L'évènement a bien été ajouté.");
return $this->redirect($this->generateUrl('photo_event_list'));
}
return $this->render('RoyalMovePhotoBundle:Event:add.html.twig', array(
'form' => $form->createView()
));
}
}
Et la EventHandler
classe:
class EventHandler extends AbstractHandler
{
public function process()
{
$form = $this->form;
$request = $this->request;
if($request->isMethod('POST')) {
$form->bind($request);
if($form->isValid()) {
$this->onSuccess($form->getData());
return true;
}
}
return false;
}
public function onSuccess($entity)
{
$em = $this->em;
$em->persist($entity);
$em->flush();
}
}
Je suis un peu coincé maintenant, est-ce que quelqu'un a une idée?
OriginalL'auteur Nesk | 2013-04-01
Vous devez vous connecter pour publier un commentaire.
Vous avez seulement besoin de définir les données de votre domaine:
OriginalL'auteur Andy.Diaz
Afin d'option apparaît sélectionné dans le formulaire, vous devez définir de valeur correspondant à l'entité elle-même.
En fait, je l'ai déjà fait, mais j'ai oublié de le mentionner dans la question. J'ai édité. Merci pour votre aide.
OriginalL'auteur gatisl
Pour
non-mapped
entité choix des champs, la méthode que j'ai trouvé plus facile a l'aide de lachoice_attr
option avec uncallable
. Cela permettra de parcourir la collection de choix et vous permettre d'ajouter des attributs personnalisés basés sur vos conditions et vos œuvres avec le développement de l', multiples, et l'attribut personnalisé options.OriginalL'auteur fyrye
Lorsque vous utilisez le
query_builder
option, et ledata
option s'attend à une instance de la collection, et vous ne pas voulez toucher votre contrôleur en ajoutantsetDatas
pour seulement certains champs, et vous avez déjà votre querybuilder et l'id de la repeupler les options de votre classe de type de formulaire, vous pouvez fournir à nouveau une sélection comme suit:Puis dans votre Méthode add ()
EDIT: Réel de cas d'utilisation exemple
Vous voulez le remplir de nouveau un groupe de cases à cocher rendu avec les éléments suivants:
Label: What is your favourite meal?
4 Checkboxes: Pasta, Pizza, Spaghetti, Steak
Et vous souhaitez le remplir de nouveau 2 Cases:
Pizza, Steak
$qb_all
serait un QueryBuilder exemple avec la tous les 4 sélectionnables Cases$qb_filtered
serait une nouvelle QueryBuilder exemple avec le repeuplement des Cases à cocherPizza, Steak
. Ainsi, un "filtré" version de la précédente.$qb_all
et qu'est-ce que$qb_filtered
dans un vrai cas d'utilisation?J'ai rajouté un EDIT de mon post. Son plus clair maintenant?
OriginalL'auteur Fabian Picone