Pregunta

Yo estoy usando la FOSUserBundle y haya sobreescrito el RegistrationController.Cuando se envía el formulario y válido, quiero llegar a la dirección de correo electrónico introducida por el usuario en el formulario de registro.

Pero no veo ninguna forma de conseguirlo.Tomado de la Documentación de formularios de Symfony2, usted puede obtener los datos del formulario como este:

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

Pero el RegistrationController no sabe el get() método (ya que no es heredado de la Symfony2 controladora de la entidad).Así que podría ir así:

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

Pero esto devuelve NULL.Ahora trato de hacerlo desde 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();

Alguna idea?

¿Fue útil?

Solución

Es muy, muy simple.Crear un formulario con la entidad relacionada.En el FOSUserBundle, usted debe tener una RegistrationFormHandler, y en process el método que obtuve:

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

Después de la línea $this->form->bind($this->request) cada valor en $user objeto se sobrescribe con los datos de formulario.Así que usted puede utilizar $user->getEmail().

Por otra parte, usted es capaz de obtener los datos directamente desde la solicitud, pero no por el nombre de la propiedad, sino por la forma nombre.En FOSUserBundle formulario de inscripción se llama fos_user_registration - se puede encontrar en FOS/UserBundle/Form/Type/RegistrationFormType.php en getName método.

Usted obtener mediante:

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

Otros consejos

Si desea utilizar el Controlador como un Servicio (que deben trabajar con este), se podría pasar el RequestStack (sf >=2.4) en el constructor y hacer $this->request_stack->getCurrentRequest()->get();

Mi conjetura es que usted está tratando de obtener los datos de envío.Usted está tratando de poner los datos en un objeto de formulario supongo.Yo recomendaría que usted echa un vistazo a: http://symfony.com/doc/current/book/forms.html si usted tiene un formulario personalizado.

Respecto a tu pregunta, la forma es probable que contenga un nombre.Si usted quiere tener acceso directo a ella en lugar de hacer las cosas en su formulario, usted necesita para recuperar multinivel si directamente a través de la verdad en $profundo, get('registration_form_name[email]', null, true); Usted también puede hacer $email = $request->get('registration_form_name')['email']; (si usted tiene php 5.4+)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top