Comment puis-je obtenir les données d'un formulaire dans le FOSUserBundle formulaire d'inscription?
-
21-12-2019 - |
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?
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+)