Как я могу получить данные формы из регистрационной формы FOSUserBundle?
-
21-12-2019 - |
Вопрос
я использую 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+)