IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

FOSUserBundle Editer un utilisateur


Sujet :

Symfony PHP

  1. #1
    Membre actif
    Inscrit en
    Février 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 47
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre actif
    Inscrit en
    Février 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 47
    Par défaut
    Bon mon second problème (le fait que le mot de passe ne s'enregistrer pas) est résolu

    il ne fallait pas passer par l'entity manager mais pas le userManager de FOS dans le controller

    AVANT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ($editForm->isValid()) {
    			$em->flush();
     
    			return $this->redirect($this->generateUrl('lig_user_user_edit', array('id' => $id)));
    		}
    APRES :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ($editForm->isValid()) {
    			/** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
    			$userManager = $this->container->get('fos_user.user_manager');
     
    			$userManager->updateUser($user);
     
    			return $this->redirect($this->generateUrl('lig_user_user_edit', array('id' => $id)));
    		}

    Me reste toujours le problème que bien que mon formulaire soit généré avec le groupe de validation 'edition' mon champ input a l'attribut html5 required, et je n'ai pas vraiment envie de laisser le form novalidate c'étais juste pour tester que le groupe de validation fonctionné bien.

    d'avance merci

Discussions similaires

  1. [2.x] [FOSUserBundle] Gestion des utilisateurs "type logiciel" ?
    Par Soobook dans le forum Symfony
    Réponses: 6
    Dernier message: 23/05/2013, 09h52
  2. [2.x] [FosUserBundle] Gestion des utilisateurs
    Par kustomkadiak dans le forum Symfony
    Réponses: 6
    Dernier message: 09/03/2013, 20h58
  3. [2.x] [FOSUserBundle] Edition du profil avec un champ 'disabled'
    Par Tony2807 dans le forum Symfony
    Réponses: 4
    Dernier message: 22/06/2012, 15h34
  4. [SQl SERVER 2005 Compact Edition] Fonctions utilisateurs
    Par dino86 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/04/2007, 16h00
  5. Réponses: 2
    Dernier message: 14/02/2007, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo