dimanche 12 mars 2017

Symfony 3 : Adding checkboxes to form form database

I'm struggling with symfony forms. I want to build a form for an user. This user as a arraycollection field that gather products (nom, description).

I would like to create a form that create a checkbox for each of the products passed to the form builder. Actually it just created input fields without labels... Here is the code of my UserType class :

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';
}

Here is my 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';
}

Here is my 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(),
    ));
}

Thanks ahead for your help.




Aucun commentaire:

Enregistrer un commentaire