各画像にキーワードをタグ付けできるようにする必要がある画像のギャラリーを作成しています。タグを処理するために、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 リスナーでは? その場合でも、少なくとも一時的にタグをエンティティに保存してから解析する必要があります。より良い方法はありますか?