Partage
  • Partager sur Facebook
  • Partager sur Twitter

Modifier les requête en Symfony

Sujet résolu
    28 mai 2015 à 3:06:05

    Bonsoir,

    j'utilise le fosuserbundle en symfony pour gérer les utilisateur: je génère le formulaire d'enregistrement (register) et j'ai ajouté des attributs à la classe user.php et ça fonctionne. mon problème que j'ai un attribut de type entier "budget" que j'ai ajouté et il doit être une constante pour tout les utilisateur. c'est à dire que lorsque un utilisateur remplit le formulaire d'enregistrement (nom, mail, mdp) cet attribut(qui n'est pas affiché dans le formulaire) doit être ajouté automatiquement à une valeur constante disant 1000. Des propositions svp.

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      28 mai 2015 à 3:29:01

      doctrine te permet d'automatiser des actions lors d'un enregistrement par exemple. tu peux ainsi initialiser des variable

      jette un œil ici : http://symfony.com/fr/doc/current/book/doctrine.html#callbacks-et-cycle-de-vie

      • Partager sur Facebook
      • Partager sur Twitter
        28 mai 2015 à 6:34:28

        Bonjour,

        Si c'est à la création du user, une initialisation dans le construct de la class ne suffit t-elle pas ?

        style :

        public function __construct()
          {
          	parent::__construct();
          	$this->setBudget(1000);



        A+

        • Partager sur Facebook
        • Partager sur Twitter
          28 mai 2015 à 7:02:40

          si tu modifies le constructeur tu t'exposes a des problemes potentiels pour plus tard. dans le doute, initialise le budget au moment de l'insertion, tu n'auras plus de question a te poser apres. tu as juste a creer une fonction qui sera appelée automatiquement avant l'insertion

          /**
           * @ORM\PrePersist
           */
          public function prePersist()
          {
              $this->budget = 1000;
          }
          • Partager sur Facebook
          • Partager sur Twitter
            28 mai 2015 à 13:41:41

            j'ai fait l'appel de la fonction prePersist() dans cette fonction:

             public function registerAction(Request $request)
                {
                    /** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
                    $formFactory = $this->get('fos_user.registration.form.factory');
                    /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
                    $userManager = $this->get('fos_user.user_manager');
                    /** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
                    $dispatcher = $this->get('event_dispatcher');
            
                    $user = $userManager->createUser();
                    $user->setEnabled(true);
                  $user->prePersist();
            $event = new GetResponseUserEvent($user, $request); $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event); if (null !== $event->getResponse()) { return $event->getResponse(); } $form = $formFactory->createForm(); $form->setData($user); $form->handleRequest($request); if ($form->isValid()) { $event = new FormEvent($form, $request); $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event); $userManager->updateUser($user); if (null === $response = $event->getResponse()) { $url = $this->generateUrl('fos_user_registration_confirmed'); $response = new RedirectResponse($url); } $dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response)); return $response; }

            et ça fonctionne ;)

            merci pour vos idées .

            -
            Edité par usherach 28 mai 2015 à 14:12:14

            • Partager sur Facebook
            • Partager sur Twitter

            Modifier les requête en Symfony

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown