Comment puis-je obtenir les données d'un formulaire dans le FOSUserBundle formulaire d'inscription?

StackOverflow https://stackoverflow.com//questions/21017566

Question

Je suis l'aide de la FOSUserBundle et ont écrasé le RegistrationController.Lorsque le formulaire est soumis et valide, je veux obtenir l'adresse e-mail que l'utilisateur a entré dans le formulaire d'inscription.

Mais je ne vois aucune façon de l'obtenir.Comme pris de l' Symfony2 formes de documentation, vous pouvez obtenir des données de formulaire, comme ceci:

$this->get('request')->request->get('name');

Mais l' RegistrationController ne sais pas la get() méthode (car il n'est pas hérité de la Symfony2 contrôleur de l'entité).J'ai donc pu aller comme ceci:

// Note the ...->container->...
$this->container->get('request')->request->get('name');

Mais cela renvoie NULL.Maintenant, j'essaie de l'obtenir à partir de la $form.

// Does contain a lot of stuff, but not the entered email address
$form->get('email');

// Does also contain a lot of stuff, but not the desired content
$request->get('email');
$request->request('email');

// Throws error message: No method getData()
$request->getData();

Une idée?

Était-ce utile?

La solution

C'est vraiment, vraiment simple.Vous créez un formulaire avec l'entité associée.Dans le FOSUserBundle, vous devriez avoir une RegistrationFormHandler, et dans process la méthode que vous avez:

$user = $this->createUser();
$this->form->setData($user);
if ('POST' === $this->request->getMethod()) {
     $this->form->bind($this->request);
     if ($this->form->isValid()) /**(...)**/

Après la ligne $this->form->bind($this->request) chaque valeur dans $user objet est remplacé par les données de formulaire.De sorte que vous pouvez utiliser $user->getEmail().

D'autre part, vous êtes en mesure d'obtenir des données directement à partir de la demande, mais pas par le nom de la propriété, mais par la forme nom de.Dans FOSUserBundle formulaire d'inscription, il est appelé fos_user_registration - vous pouvez le trouver dans FOS/UserBundle/Form/Type/RegistrationFormType.php dans getName la méthode.

Vous obtenez ceci:

$registrationArray = $request->get('fos_user_registration');
$email = $registrationArray['email'];

Autres conseils

Si vous utilisez le Contrôleur de comme un Service (qui doit travailler avec cet), vous pourriez passer le RequestStack (sf >=2.4) dans le constructeur et ne $this->request_stack->getCurrentRequest()->get();

Ma conjecture est que vous essayez d'obtenir les données POST.Vous tentez de mettre les données dans un objet de formulaire je présume.Je vous recommande de jeter un oeil à: http://symfony.com/doc/current/book/forms.html si vous avez un formulaire personnalisé.

Comme en ce qui concerne votre question, la forme est probablement contenant un nom.Si vous voulez avoir un accès direct à la place de faire les choses dans votre formulaire, vous devez chercher multiniveau si directement via le vrai à $profonde, get('registration_form_name[email]', null, true); Vous pouvez aussi le faire $email = $request->get('registration_form_name')['email']; (si vous avez de php 5.4+)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top