我有以下Json字符串:
{
"firstName":"Jane",
"tagList": ["chess", "tennis"]
}
这是UserType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email', EmailType::class)
->add('firstName')
->add('lastName')
->add('aboutMe')
->add('password')
->add('tagList', EntityType::class)
->add('agreeToContact')
->add('useMyLocation')
->add('pushNotifications')
->add('emailNotifications')
->add('inAppAlerts')
->add('addRequestIntoNatCal')
;
$builder->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
$form = $event->getForm();
$tagList = $form["tagList"]->getData();
foreach ($tagList as $tag){
$testTag = $this->em->getRepository('CoreBundle:Tag')->findOneBy([
'name' => $tag
]);
if ($testTag != null)
{
$user->addTag($testTag);
}
else
{
$newTag = new Tag();
$newTag->setName($tag);
$this->em->persist($newTag);
$user->addTag($newTag);
}
}
});
}
我如何在Json中提交标签名称列表并设置相应的标签实体列表给用户?User
和Tag
实体具有Many-to-Many
关系。问题是:首先我需要检查Tag
实体是否存在,如果是,将该标签添加到用户,如果没有创建新标签并将其添加到用户。如何在addEventListener
使用eventSubscriber代替。将它注册为一个服务,将token_storage注入到它的构造函数