¿Cómo puedo obtener el formulario de datos de la FOSUserBundle formulario de inscripción?
-
21-12-2019 - |
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?
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+)