Como posso obter os dados do formulário de registro do FOSUserBundle?
-
21-12-2019 - |
Pergunta
estou usando o FOSUserBundle e substituíram o RegistrationController
.Quando o formulário for enviado e válido, desejo obter o endereço de e-mail que o usuário inseriu no formulário de registro.
Mas não vejo nenhuma maneira de conseguir isso.Como retirado do Documentação de formulários do Symfony2, você pode obter dados de formulário como estes:
$this->get('request')->request->get('name');
Mas o RegistrationController
não sabe o get()
método (pois não é herdado da entidade controladora do Symfony2).Então eu poderia ir assim:
// Note the ...->container->...
$this->container->get('request')->request->get('name');
Mas isso retorna NULL
.Agora eu tento obtê-lo do $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();
Qualquer ideia?
Solução
É muito, muito simples.Você cria um formulário com entidade relacionada.No FOSUserBundle você deve ter um RegistrationFormHandler
, e em process
método que você tem:
$user = $this->createUser();
$this->form->setData($user);
if ('POST' === $this->request->getMethod()) {
$this->form->bind($this->request);
if ($this->form->isValid()) /**(...)**/
Depois da linha $this->form->bind($this->request)
cada valor em $user
o objeto é substituído pelos dados do formulário.Então você pode usar $user->getEmail()
.
Por outro lado você consegue obter dados diretamente da solicitação, mas não pelo nome da propriedade, mas sim pelo nome do formulário.No formulário de registro FOSUserBundle é chamado fos_user_registration
- você pode encontrá-lo em FOS/UserBundle/Form/Type/RegistrationFormType.php
em getName
método.
Você consegue isso:
$registrationArray = $request->get('fos_user_registration');
$email = $registrationArray['email'];
Outras dicas
Se você usasse Controller as a Service (que deve funcionar com isso), você poderia passar o RequestStack (sf >=2.4) no construtor e fazer $this->request_stack->getCurrentRequest()->get();
Meu palpite é que você está tentando obter os dados do POST.Você está tentando colocar os dados em um objeto de formulário, presumo.Eu recomendo que você dê uma olhada em: http://symfony.com/doc/current/book/forms.html se você tiver um formulário personalizado.
Quanto à sua pergunta, o formulário provavelmente contém um nome.Se você quiser ter acesso direto a ele em vez de fazer as coisas em seu formulário, você precisa buscá-lo em vários níveis, se diretamente por meio do true em $deep, get('registration_form_name[email]', null, true);
Você também pode fazer $email = $request->get('registration_form_name')['email'];
(se você tiver php 5.4+)