Как я могу получить данные формы из регистрационной формы FOSUserBundle?

StackOverflow https://stackoverflow.com//questions/21017566

Вопрос

я использую FOSUserBundle и перезаписали RegistrationController.Когда форма будет отправлена ​​и действительна, я хочу получить адрес электронной почты, который пользователь ввел в регистрационную форму.

Но я не вижу никакого способа получить это.Как взято из Документация форм Symfony2, вы можете получить данные формы следующим образом:

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

Но RegistrationController не знает get() метод (поскольку он не унаследован от объекта контроллера Symfony2).Итак, я мог бы пойти так:

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

Но это возвращает NULL.Теперь я пытаюсь получить это от $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();

Есть идеи?

Это было полезно?

Решение

Это действительно очень просто.Вы создаете форму со связанной сущностью.В FOSUserBundle у вас должен быть RegistrationFormHandler, И в process метод, который у вас есть:

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

После линии $this->form->bind($this->request) каждое значение в $user объект перезаписывается данными из формы.Таким образом, вы можете использовать $user->getEmail().

С другой стороны, вы можете получить данные напрямую из запроса, но не по имени свойства, а по имени формы.В форме регистрации FOSUserBundle он называется fos_user_registration - вы можете найти это в FOS/UserBundle/Form/Type/RegistrationFormType.php в getName метод.

Вы получите это:

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

Другие советы

Если бы вы использовали контроллер как услугу (который должен работать с этим), вы могли бы передать RequestStack (sf >=2.4) в конструктор и выполнить $this->request_stack->getCurrentRequest()->get();

Я предполагаю, что вы пытаетесь получить данные POST.Я полагаю, вы пытаетесь поместить данные в объект формы.Я бы порекомендовал вам посмотреть: http://symfony.com/doc/current/book/forms.html если у вас есть специальная форма.

Что касается вашего вопроса, то форма, вероятно, содержит имя.Если вы хотите иметь к нему прямой доступ вместо того, чтобы делать что-то в своей форме, вам нужно получить его на многоуровневом уровне, если напрямую через true в $deep, get('registration_form_name[email]', null, true); Вы также можете сделать $email = $request->get('registration_form_name')['email']; (если у вас PHP 5.4+)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top