我正在构建一个图像库,必须允许使用关键字标记每个图像。为了处理标签,我使用 FPN/TagBundle ( https://github.com/FabienPennequin/FPNTagBundle )。
我已经使用以下内容构建了表单:
// UserAlbumImageType.php
...
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('description', null, array('label' => 'Description'))
//TODO: add tags
->add('tags', null, array(
'label' => 'Tags',
'mapped' => false,
'required' => false,
'attr' => array(
'class' => 'tags',
),
))
->add('licenseType', 'entity', array(
'label' => 'License',
'class' => 'VoxCoreBundle:LicenseType',
))
->add('privacyType', null, array('label' => 'Privacy'))
;
}$builder
->add('images', 'collection', array(
'type' => new UserAlbumImageType(),
'label' => false,
))
;
break;
...
// UserAlbumType.php
...
$builder
->add('images', 'collection', array(
'type' => new UserAlbumImageType(),
'label' => false,
))
;
break;
...
如您所见, tags 属性未映射。这是因为我不想将标签写入数据库中的字段,而是将它们保存到中央标签表中。这就是问题所在。
提交表单时,我只是调用$em->persist($userAlbum)
它,然后将更改持久化到UserAlbumImage
集合中的对象。这时,我想抓取通过表单提交的标签,并使用标签管理器进行设置。我不确定在哪里处理这个问题。在 Doctrine postPersist 监听器中?如果是这样,我仍然需要至少暂时将标签保存到实体中,然后解析它们。有没有更好的办法?