Я создаю галерею изображений, которая должна позволять помечать каждое изображение ключевыми словами. Для обработки тегов я использую FPN/TagBundle (https://github.com/FabienPennequin/FPNTagBundle).Symfony2 form collection -
Я уже построил форму, используя следующие:
// 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;
...
Как вы можете видеть, свойство метки не отображается. Это связано с тем, что я не хочу писать теги в поле в базе данных, но вместо этого сохраняю их в центральной таблице тегов. И вот в чем проблема.
Когда форма отправлена, я просто звоню $em->persist($userAlbum)
, который затем сохраняет изменения в объектах UserAlbumImage
в коллекции. В это время я хотел бы захватить теги, которые были отправлены через форму, и установить их с помощью менеджера тегов. Я не знаю, где это сделать. В слушателе PostPersist Doctrine? Если это так, мне все равно нужно будет сохранять теги в объекте хотя бы временно, а затем проанализировать их. Есть ли способ лучше?
Спасибо за предложение. Это нормально, но, к сожалению, FPNTagBundle требует, чтобы объект (в данном случае UserAlbumImage) сохранялся до того, как теги могут быть сохранены: https://github.com/FabienPennequin/FPNTagBundle#using-tags –