在Symfony2中创建时将用户链接到另一个实体


Linking a user to another entity on create in Symfony2

我正在使用FOS_user包,当我创建一个用户时,我想将其链接到另一个实体,即公司。我尝试使用以下代码创建一个侦听器:

public static function getSubscribedEvents()
{
    return array(
        FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
    );
}
public function onRegistrationSuccess(FormEvent $event) {
}

这工作得很好,我可以访问函数中的$event。现在,我想访问用户在表单中添加的公司名称。此外,我想创建一个公司并将其绑定到新用户,所以像这样:

$company = new Entity'Company();
$company->setTitle($theInputFromTheForm);
$user->addCompany($company);

我不知道如何访问表单的数据并将公司保存在用户中。使用侦听器是正确的方法吗?

事件FOSUserEvents::REGISTRATION_SUCCESS收到FormEvent对象。您可以使用$event->getForm()

在侦听器中获取注册表单

所以在你的例子中;

public function onRegistrationSuccess(FormEvent $event) {
    $registrationForm = $event->getForm();
    $registrationFormData = registrationForm->getData();
}

我最终创建了一个表单类型CompanyType,它添加了我公司的标题。在我的UserBundleRegistrationFormType中,我添加了一个集合到这个表单类型。我在FOSUserEvents::REGISTRATION_INITIALIZE上创建了一个侦听器来添加一个空公司。

public function onRegistrationInitialize(UserEvent $event) {
    $user = $event->getUser();
    $user->addCompany($company);
}