2017-03-12 8 views
0

Ich habe Probleme mit symfony Formen. Ich möchte ein Formular für einen Benutzer erstellen. Dieser Benutzer als Array-Sammlungsfeld, das Produkte sammelt (Name, Beschreibung).Symfony 3: Hinzufügen von Kontrollkästchen zur Formulardatenbank

Ich möchte ein Formular erstellen, die ein Kontrollkästchen für jedes der an den Formularersteller übergebenen Produkte erstellen. Tatsächlich schaffte es nur Eingabefelder ohne Etiketten ... Hier ist der Code meiner Usertype-Klasse:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 

    $builder->add('nom')->add('prenom')->add('mail')->add('tel1')->add('tel2', TextType::class, array('required' => false)) 
     ->add('username')->add('password', PasswordType::class) 
     ->add('groupe', ChoiceType::class, array(
      'choices' => array('Administrateur' => 'ROLE_SUPER_ADMIN', 'Gérant' => 'ROLE_ADMIN', 'Opérateur' => 'ROLE_USER'), 
      'expanded' => true, 
     )) 
     ->add('produits', CollectionType::class, array(
      'entry_type' => ProduitType::class 
     )) 
    ; 
} 

/** 
* {@inheritdoc} 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => User::class 
    )); 
} 

/** 
* {@inheritdoc} 
*/ 
public function getBlockPrefix() 
{ 
    return 'gestcoupons_userbundle_user'; 
} 

Hier ist mein ProduuctType Code:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 

    $builder->add('nom')->add('prenom')->add('mail')->add('tel1')->add('tel2', TextType::class, array('required' => false)) 
     ->add('username')->add('password', PasswordType::class) 
     ->add('groupe', ChoiceType::class, array(
      'choices' => array('Administrateur' => 'ROLE_SUPER_ADMIN', 'Gérant' => 'ROLE_ADMIN', 'Opérateur' => 'ROLE_USER'), 
      'expanded' => true, 
     )) 
     ->add('produits', CollectionType::class, array(
      'entry_type' => ProduitType::class 
     )) 
    ; 
} 

/** 
* {@inheritdoc} 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => User::class 
    )); 
} 

/** 
* {@inheritdoc} 
*/ 
public function getBlockPrefix() 
{ 
    return 'gestcoupons_userbundle_user'; 
} 

Hier ist mein Usercontroller Code:

public function ajouterAction(Request $request){ 

    $this->denyAccessUnlessGranted('ROLE_ADMIN', null, 'Unable to access this page!'); 
    $em = $this->getDoctrine()->getManager(); 
    $produits = $em->getRepository('ProduitBundle:Produit')->findAll(); 
    $societes = $em->getRepository('SocieteBundle:Societe')->findAll(); 
    $user = new User(); 
    foreach ($produits as $produit) { 
     $user->getProduits()->add($produit); 
    } 
    $form = $this->createForm('GestCoupons\UserBundle\Form\UserType', $user); 
    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($user); 
     $em->flush($user); 

     return $this->redirect('dashboard_admin'); 
    } 

    return $this->render('user/new.html.twig', array(
     'user' => $user, 
     'form' => $form->createView(), 
    )); 
} 

Vielen Dank für Ihre Hilfe.

+0

Ich denke, kleben Sie Ihre Usertype-Klasse als Ihre "ProduuctType" -Klassen. Können Sie Ihre Frage aktualisieren, damit wir Ihren "ProduuctType" sehen können? – ehymel

+0

Hallo ehymel, danke für deine Hilfe. Ich habe das richtige Objekt (Benutzer) übergeben, aber nicht EntityType verwendet. Jetzt funktioniert es ;). – THaulbert

Antwort

1

Sie sollten Symfony \ Bridge \ Doctrine \ Form \ Type \ EntityType anstelle von CollectionType verwenden.

In Ihrem Usertype

use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use AppBundle\Entity\Produit; 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 

    $builder 
     ->add('nom') 
     ->add('prenom') 
     ->add('mail') 
     ->add('tel1') 
     ->add('tel2', TextType::class, array(
      'required' => false 
     )) 
     ->add('username') 
     ->add('password', PasswordType::class) 
     ->add('groupe', ChoiceType::class, array(
      'choices' => array(
       'Administrateur' => 'ROLE_SUPER_ADMIN', 
       'Gérant' => 'ROLE_ADMIN', 
       'Opérateur' => 'ROLE_USER' 
      ), 
      'expanded' => true, 
     )) 
     ->add('produits', EntityType::class, array(
      'class' => Produit::class, 
      'multiple' => true, 
      'expanded' => true, 
      'label' => 'nom' //If you don't have a __toString method in your Produit Entity 
     )) 
    ; 
} 

/** 
* {@inheritdoc} 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => User::class 
    )); 
} 

/** 
* {@inheritdoc} 
*/ 
public function getBlockPrefix() 
{ 
    return 'gestcoupons_userbundle_user'; 
} 

diese Weise erhalten Sie eine Checkbox für jede Produkteinheit in Ihrer Datenbank haben und nur das, die Sie zu Ihrem Benutzer zugeordnet werden geprüft

+0

Hallo OlivierC, Danke für deine Antwort! Das war es tatsächlich. Ich habe gestern herausgefunden, dass ich immer noch Schwierigkeiten habe, durch die Dokumentation von Symfony zu kommen ^^. Jetzt bin ich mit Radioknöpfen geblieben, die ich mit Benutzer auswählen möchte. Gruppendaten. Danke nochmal! – THaulbert

+0

Wenn Sie auch Gruppeneinheiten haben, können Sie genau das tun, was Sie mit Ihren Produkten gemacht haben. Um Radiobutton zu erhalten, müssen Sie die erweiterte auf True und die Multiple-Option auf false setzen – OlivierC

+0

Auch können Sie die Frage als gelöst markieren, um anderen zu helfen, die gleiche Probleme in der Zukunft – OlivierC

Verwandte Themen