Передача пользователя в symfony2 formType с многопользовательским режимом PUGX
Я использую PUGX MultiuserBundle, потому что у меня есть 3 разных типа пользователей, с разной информацией.
Все работает хорошо, я могу зарегистрировать этих разных пользователей.
Я хочу сделать следующее: зарегистрировать пользователя (это нормально) => этот пользователь может создать своего партнера и выбрать, в какое учреждение он его поместит.
Итак, во втором своем formType я должен передать пользователю один, чтобы я мог получить все его утверждения. Но я не знаю, как это сделать с пакетом PUGX
Мой контроллер:
class BarmanController extends Controller
{
/**
* Register new Barman entities.
*
* @Route("/register", name="barman_register")
* @Template()
*/
public function registerAction()
{
$user = $this->container->get('security.context')->getToken()->getUser();
return $this->container
->get('pugx_multi_user.registration_manager')
->register('Cac\UserBundle\Entity\Barman', $user);
}
}
Регистратор PUGX:
/**
*
* @param string $class
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
public function register($class, $user)
{
$this->userDiscriminator->setClass($class);
$this->controller->setContainer($this->container);
$result = $this->controller->registerAction($this->container->get('request'));
if ($result instanceof RedirectResponse) {
return $result;
}
$template = $this->userDiscriminator->getTemplate('registration');
if (is_null($template)) {
$engine = $this->container->getParameter('fos_user.template.engine');
$template = 'FOSUserBundle:Registration:register.html.'.$engine;
}
$form = $this->formFactory->createForm();
return $this->container->get('templating')->renderResponse($template, array(
'form' => $form->createView(),
));
}
И мой formType для второго пользователя:
class BarmanFormType extends AbstractType
{
private $class;
/**
* @param string $class The User class name
*/
public function __construct($class)
{
$this->class = $class;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$id = 5;
$builder
->add('username', null, array('label' => 'Nom d\'utilisateur'))
->add('plainPassword', 'repeated', array(
'label' => 'Mot de passe',
'type' => 'password',
'options' => array('translation_domain' => 'FOSUserBundle'),
'first_options' => array('label' => 'Mot de passe'),
'second_options' => array('label' => 'Confirmez votre mot de passe'),
'invalid_message' => 'fos_user.password.mismatch',
))
->add('email', 'repeated', array(
'type' => 'email',
'options' => array('translation_domain' => 'FOSUserBundle'),
'first_options' => array('label' => 'E-mail'),
'second_options' => array('label' => 'Confirmez votre e-mail'),
'invalid_message' => 'fos_user.email.mismatch',
))
->add('bar', 'entity', array('class' => 'CacBarBundle:Bar', 'property' => 'name', 'attr' => array('placeholder' => 'Bar'),
'query_builder' => function(\Cac\BarBundle\Entity\BarRepository $er) use ($id) {
return $er->getBarByAuthorId($id);
}
));
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => $this->class,
'intention' => 'registration',
));
}
public function getName()
{
return 'cac_barman_registration';
}
}
У меня также есть общий контроллер регистра, который переопределяет контроллер регистрации пользователя FOS:
class RegistrationController extends Controller
{
public function registerAction(Request $request)
{
/** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
$formFactory = $this->get('fos_user.registration.form.factory');
/** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
$userManager = $this->get('fos_user.user_manager');
/** @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
$dispatcher = $this->get('event_dispatcher');
$user = $userManager->createUser();
$user->setEnabled(true);
$event = new GetResponseUserEvent($user, $request);
$dispatcher->dispatch(FOSUserEvents::REGISTRATION_INITIALIZE, $event);
if (null !== $event->getResponse()) {
return $event->getResponse();
}
$form = $formFactory->createForm();
$form->setData($user);
$form->handleRequest($request);
if ($form->isValid()) {
$event = new FormEvent($form, $request);
$dispatcher->dispatch(FOSUserEvents::REGISTRATION_SUCCESS, $event);
$userManager->updateUser($user);
if (null === $response = $event->getResponse()) {
if (strpos($request->getPathInfo(), "/barman/") === false) {
$url = $this->generateUrl('fos_user_registration_confirmed');
$response = new RedirectResponse($url);
}
else
{
$this->get('session')->getFlashBag()->add('notice','Le barman a était créé !');
$response = new Response('barman');
}
}
$dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response));
return $response;
}
return $this->render('CacUserBundle:Registration:register.html.twig', array(
'form' => $form->createView(),
));
}
}
Мне удается получить пользователя в части PUGX, но я не знаю, как передать его из RegistrationManager в мой FormType
Я перепробовал много возможностей, я думаю, что я близко, но не могу найти решение, чтобы заставить его работать