FOSUserBundle Editer un utilisateur
Bonjour,
J'utilise FOSUserBundle et PUGXMultiUserBundle
Ce que j'aimerai faire c'est avoir un seul et même formulaire pour l'ajout et l'édition, à la seule différence que à l'ajout le mot de passe (et sa vérification) sont obligatoire, mais pas a l'édition (si c'est vide, le mot de passe est inchangé, sinon le mot de passe est changé)
Pour cela je me suis orienté vers les groupes de validations.
Premier problème, mon champs 'mot de passe' de mon formulaire RegistrationFormType en mode groupe de validation 'edition' à l'attribut required html5.
si je force le formulaire en novalidate afin de vérifier le groupe de validation ça a l'air de fonctionner, en mode groupe de validation 'registration' sa m'indique que le champs mot de passe ne peux être vide, en mode 'edition' il me soumet le formulaire, la ou sa coince c'est que si je modifie mon mot de passe (en mode groupe de validation 'edition') il ne me prend pas en compte le change, le mot de passe reste inchangé.
Voici mon code :
Controller :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
<?php
namespace LIG\Bundle\UserBundle\Controller;
use Symfony\Bundle\FrameworkBundle as FrameworkBundle;
use Symfony\Component\HttpFoundation as HttpFoundation;
use LIG\Bundle\UserBundle as LIGUserBundle;
class UserController extends FrameworkBundle\Controller\Controller
{
public function listAction()
{
$em = $this->getDoctrine()->getManager();
$users = $em->getRepository('LIGUserBundle:User')->findAll();
return $this->render('LIGUserBundle:User:list.html.twig', array('users' => $users));
}
public function viewAction($id)
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('LIGUserBundle:User')->find($id);
if (!$user) {
throw $this->createNotFoundException('Unable to find User entity.');
}
return $this->render('LIGUserBundle:User:view.html.twig', array(
'user' => $user,
));
}
public function editAction($id)
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('LIGUserBundle:User')->find($id);
if (!$user) {
throw $this->createNotFoundException('Unable to find User entity.');
}
$editForm = $this->createEditForm($user);
return $this->render('LIGUserBundle:User:edit.html.twig', array(
'user' => $user,
'editForm' => $editForm->createView()
));
}
public function updateAction(HttpFoundation\Request $request, $id)
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('LIGUserBundle:User')->find($id);
if (!$user) {
throw $this->createNotFoundException('Unable to find User entity.');
}
$editForm = $this->createEditForm($user);
$editForm->handleRequest($request);
if ($editForm->isValid()) {
$em->flush();
return $this->redirect($this->generateUrl('lig_user_user_edit', array('id' => $id)));
}
return $this->render('LIGUserBundle:User:edit.html.twig', array(
'user' => $user,
'editForm' => $editForm->createView()
));
}
public function deleteAction($id)
{
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('LIGUserBundle:User')->find($id);
if (!$user) {
throw $this->createNotFoundException('Unable to find User entity.');
}
return $this->render('LIGUserBundle:User:delete.html.twig', array(
'user' => $user,
));
}
private function createEditForm(LIGUserBundle\Entity\User $user)
{
$userDiscriminator = $this->get('pugx_user.manager.user_discriminator');
$formType = $userDiscriminator->getFormType('registration');
$formType = new \LIG\Bundle\UserBundle\Form\Entity\User\Administrator\RegistrationFormType('LIG\Bundle\UserBundle\Entity\UserAdministrator');
$editForm = $this->createForm($formType, $user, array(
'action' => $this->generateUrl('lig_user_user_update', array('id' => $user->getId())),
'method' => 'POST',
'attr' => array('novalidate' => 'novalidate'),
'validation_groups' => array('Default', 'Edit')
));
$editForm->add('submit', 'submit', array('label' => 'Update'));
return $editForm;
}
} |
Mon RegistrationFormType :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
<?php
namespace LIG\Bundle\UserBundle\Form\Entity\User;
use Symfony\Component\Form as Form;
use Symfony\Component\OptionsResolver as OptionsResolver;
use FOS\UserBundle as FOSUserBundle;
use LIG\Bundle\UserBundle as LIGUserBundle;
class RegistrationFormType extends FOSUserBundle\Form\Type\RegistrationFormType
{
public function buildForm(Form\FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
->add('type', 'hidden', array(
'data' => $options['data_class']::getType(),
'mapped' => false
))
->add('firstname')
->add('lastname')
;
}
public function setDefaultOptions(OptionsResolver\OptionsResolverInterface $resolver)
{
parent::setDefaultOptions($resolver);
}
public function getName()
{
return 'lig_user_form_entity_user_registration';
}
} |
et mon validation.yml :
Code:
1 2 3 4 5 6 7 8 9
|
LIG\Bundle\UserBundle\Entity\User:
properties:
firstname:
- NotBlank: ~
lastname:
- NotBlank: ~
plainPassword:
- NotBlank: { groups: [Registration] } |
D'avance merci pour votre aide.