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 post form api [3.x]


Sujet :

Symfony PHP

  1. #1
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut fosuserbundle post form api
    Bonjour,

    j'essaie tant bien que mal à envoyer des données en post pour enregistrer un utilisateur via le formulaire de FOSUserBundle.

    Mais dans mon controlleur le form ne se soumet pas et je n'arrive pas à comprendre pourquoi...

    mon controlleur :
    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
     
    /**
         *
         * Post Form to register a new user
         *
         * @param Request $request
         *
         * @Rest\View()
         * @Rest\Post()
         *
         * @return Response
         */
        public function postRegistrationFormAction(Request $request)
        {
            /** @var $userManager UserManagerInterface */
            $userManager = $this->get('fos_user.user_manager');
            /** @var $dispatcher EventDispatcherInterface */
            $dispatcher = $this->get('event_dispatcher');
     
            /** @var User $user */
            $user = $userManager->createUser();
            $user->setEnabled(true);
     
            $event = new GetResponseUserEvent($user, $request);
            $dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event);
     
            if(null !== $event->getResponse())
            {
                return $event->getResponse();
            }
     
            $form = $this->get('form.factory')->create(RegistrationType::class, $user, array('csrf_token_id'=>false));
            $form->setData($user);
     
            $form->handleRequest($request);
     
            if($form->isSubmitted())
            {
                if($form->isValid())
                {
                    $event = new FormEvent($form, $request);
                    $dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);
     
                    $user = $this->transferUserDataIfExisting($user);
     
                    $user->setDateInscription(new \DateTime());
     
                    $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;
                }
     
                $event = new FormEvent($form, $request);
                $dispatcher->dispatch(FOSUserEvents::REGISTRATION_FAILURE, $event);
     
                if(null !== $response = $event->getResponse())
                {
                    return $response;
                }
            }
     
            return $form;
        }
    ça fonctionne quand il me le génère sur une vue twig et que je lui renvoie.

    mais pas moyen de renvoyer le formulaire en POST en dehors de ça...

    par exemple sur une page HTML je le renvoie comme ceci :

    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
     
    <form name="app_user_registration" action="url-vers-le-controlleur-ci-dessus" method="post">
    <div id="app_user_registration">
        <div>
            <label for="app_user_registration_email" class="required">form.email</label>
            <input type="email" id="app_user_registration_email" name="app_user_registration[email]" required="required" />
        </div><div>
            <label for="app_user_registration_username" class="required">form.username</label>
            <input type="text" id="app_user_registration_username" name="app_user_registration[username]" required="required" maxlength="180" pattern=".{2,}" />
        </div><div>
            <label for="app_user_registration_plainPassword_first" class="required">form.password</label>
            <input type="password" id="app_user_registration_plainPassword_first" name="app_user_registration[plainPassword][first]" required="required" />
        </div><div>
            <label for="app_user_registration_plainPassword_second" class="required">form.password_confirmation</label>
            <input type="password" id="app_user_registration_plainPassword_second" name="app_user_registration[plainPassword][second]" required="required" />
        </div><div>
            <label for="app_user_registration_lastName" class="required">Last name</label>
            <input type="text" id="app_user_registration_lastName" name="app_user_registration[lastName]" required="required" />
        </div><div>
            <label for="app_user_registration_firstName" class="required">First name</label>
            <input type="text" id="app_user_registration_firstName" name="app_user_registration[firstName]" required="required" />
        </div>
    </div>
    <input type='submit' />
    </form>
    Même une feuille de papier est plus légère si on la porte à deux.

  2. #2
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    Ok j'ai réussi à soumettre mon formulaire.

    second problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"code":400,"message":"Validation Failed","errors":{"errors":["This form should not contain extra fields."],"children":{"email":[],"username":[],"plainPassword":{"children":{"first":[],"second":[]}},"lastName":[],"firstName":[]}}}
    je ne sais pas si c'est dû à quoi, j'envoie les même attribut 'name' que dans les formulaires 'fosuserbundle'.

    quand j'envoie rien ça passe.

    EDIT : En explicitant l'attribut 'name' dans le formulaire ça fonctionne, mais seulement en x-www-form-urlencoded et non en form-data

    mon formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ->add('username', TextType::class, array('attr'=>array(
                    'name'=>'username'
                )))
    Même une feuille de papier est plus légère si on la porte à deux.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 252
    Points : 358
    Points
    358
    Par défaut
    Je ne connais pas tout le contexte mais l'erreur indique qu'un champs qui n'existe pas dans le "RegistrationType" est transmis.
    Comment est généré le formulaire dans twig ? si tu ajoute un champ manuellement (y compris un bouton submit) cette erreur va ressortir. Il faut soit autorisé les champs supplémentaires (voir "allow_extra_fields") soit ajouté ce champs au form builder.

  4. #4
    Membre actif Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Points : 273
    Points
    273
    Par défaut
    Ce n'est pas dans une vue twig, j'utilise symfony comme api rest, je post les données avec postman,

    j'ai donc autorisé les extrafields mais il ne prend pas les variables par défaut dû au format de la requête.

    D'après ce que j'ai lu, il semblerait que je dois sélectionner les données manuellement quand j'utilise form-data.

    ça fonctionne avec x-www-form-urlencoded, je n'ai pas besoin d'uploader de fichier pour le moment, si jamais par la suite j'ai besoin et que je cale, je ferai un topic pour form-data.

    Merci pour ta réponse.

    Solution : expliciter attribut(s) 'name' dans les formulaires symfony.
    Même une feuille de papier est plus légère si on la porte à deux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. objectTag(form) API Dreamweaver
    Par TBA_78 dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 24/12/2013, 18h28
  2. Réponses: 0
    Dernier message: 06/04/2013, 21h51
  3. [2.x] [FosUserBundle] Override form registration
    Par Agité dans le forum Symfony
    Réponses: 5
    Dernier message: 11/07/2012, 16h55
  4. [tomcat] mod_jk post form multipart/post data
    Par metalpetsFR dans le forum Apache
    Réponses: 7
    Dernier message: 06/12/2011, 23h34
  5. PHP HTTP POST et API Flickr envoi d'un formulaire et retour
    Par YannCo dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 09/01/2011, 01h21

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