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?

Foi útil?

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+)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top