У меня есть проект Symfony с FOSUserBundle, я расширил FormType в своем личном пакете после этого руководства « http://symfony.com/doc/master/bundles/FOSUserBundle/overriding_forms.html »
Я создал объект Person с именем, фамилией, адресом …, создал свой FormType следующим образом:
public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('firstName', TextType::class) ->add('lastName', TextType::class) ->add('adress', TextType::class) ->add('account', AccountType::class) ; }
Объект Account является классом пользователя для FOSUserBundle
Затем я сгенерировал CRUD для Person, newAction () выглядит так:
public function newAction(Request $request) { $person = new Person(); $form = $this->createForm('AppBundle\Form\PersonType', $person); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $person->getAccount()->setEnabled(1); //i'm doing this because it's not automatic $em->persist($person->getAccount()); $em->persist($person); $em->flush($person); return $this->redirectToRoute('fos_user_security_login'); // redirecting to the login page because it's not done automatically } return $this->render('person/new.html.twig', array( 'person' => $person, 'form' => $form->createView(), )); }
У двух сущностей есть отношения OneToOne, причем этот код они сохраняются в базе данных, и я могу использовать имя пользователя и пароль для входа в систему
Вот моя конфигурация FOSUerBundle:
fos_user: db_driver: orm firewall_name: main user_class: AppBundle\Entity\Account from_email: address: "%mailer_user%" sender_name: "%mailer_user%" registration: form: type: AppBundle\Form\AccountType
Я хочу, чтобы пользователь автоматически регистрировался после регистрации, как это происходит при использовании регистрации по умолчанию FOSUserBundle, кто-нибудь понял, как это сделать?
Я пробовал много всего, но не успел
Спасибо за ваши ответы
Мне удалось войти с моего контроллера с помощью объекта $ person-> getAccount ():
Все, что мне нужно сделать, это отправить событие REGISTRATION_COMPLETED, как в контроллере по умолчанию: https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Controller/RegistrationController.php#L78
Просто скопировал код на мой контроллер
Это приведет к аутентификации: https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/EventListener/AuthenticationListener.php