プロジェクトに Sonata Media Bundle を統合しようとしています。問題は、バンドルがどのように機能するかを理解していないことです。
「Application」内に Media、Gallery、および GalleryHasMedia クラスが生成されています。それらは何のため?ユーザーエンティティに画像フィールドとビデオフィールドを追加するにはどうすればよいですか? (どちらも複数形)
よろしく、ノヴァ
プロジェクトに Sonata Media Bundle を統合しようとしています。問題は、バンドルがどのように機能するかを理解していないことです。
「Application」内に Media、Gallery、および GalleryHasMedia クラスが生成されています。それらは何のため?ユーザーエンティティに画像フィールドとビデオフィールドを追加するにはどうすればよいですか? (どちらも複数形)
よろしく、ノヴァ
メディアは、ビデオ/画像のすべてのプロパティを保存するエンティティです:幅/高さ/ファイルパス...
エンティティギャラリーは、複数のメディア (同じ主題に関するビデオ/写真のギャラリー) をリンクする場合に便利です。
エンティティGalleryHasMediaは、ギャラリーとメディアをリンクするエンティティです。
SonataMedia はバンドル アプリケーションにインストールされるため、必要に応じてコードを簡単に拡張および変更できます。
メディアまたはギャラリーをユーザーに追加する場合は、次の手順を実行するだけです。
class UserEntity
{
/**
* @var Media
*
* @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="picture", referencedColumnName="id")
* })
*/
private $picture;
/**
* @var Gallery
*
* @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Gallery")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="gallery", referencedColumnName="id")
* })
*/
private $gallery;
}
コンソールでゲッターとセッターを再生成します。
php app/console doctrine:generate:entities TestBundle:User
そして、ユーザー エンティティで SonataMedia を使用するように設定されています。
アップデート
ユーザーの複数の画像を管理する場合は、次のことを行う必要があります。
ユーザーエンティティ
class UserEntity
{
/**
* @var Media
*
* @ORM\OneToMany(targetEntity="Application\Sonata\MediaBundle\Entity\Media", mappedBy="user")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="images", referencedColumnName="id")
* })
*/
private $images;
}
アプリケーション\Sonata\MediaBundle\Entity\Media
class Media
{
/**
* @var User
*
* @ORM\ManyToOne(targetEntity="UserEntity", inversedBy="images")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user", referencedColumnName="id")
* })
*/
private $user;
}
ユーザー管理者
class UserAdmin
{
public function configureFormFields(FormMapper $formMapper)
{
$formMapper->add('images', 'sonata_type_collection', array(), array(
'edit' => 'inline',
'inline' => 'table',
'link_parameters' => array(
'context' => 'images',
'provider' => 'sonata.media.provider.image'
)
))
}
}
edit プロパティと inline プロパティを変更することで表示を変更できます。link_parameters はフォームの必須プロパティを設定します: context と provider
更新 2
質問2
ユーザーに複数のギャラリーが必要な場合は、前回の更新で説明したのと同じプロセスを実行するだけです。唯一の違いは、たとえば新しいプロパティを作成する必要があることです。 Sonata の Gallery エンティティを作成し、SonataAdmin クラスに新しいプロパティを追加します。フィールド名の画像を imageGalleries に変更するだけです。
質問 3
Sonata 以外では、sonata_media_type フォームを使用して Media を処理する必要があります。 http://sonata-project.org/bundles/media/2-0/doc/reference/form.html oneToMany の関係があるため、sonata_media_type のコレクションになります。
私が知っているギャラリーを扱うフォームはありません。