7

プロジェクトに Sonata Media Bundle を統合しようとしています。問題は、バンドルがどのように機能するかを理解していないことです。

「Application」内に Media、Gallery、および GalleryHasMedia クラスが生成されています。それらは何のため?ユーザーエンティティに画像フィールドとビデオフィールドを追加するにはどうすればよいですか? (どちらも複数形)

よろしく、ノヴァ

4

2 に答える 2

22

メディアは、ビデオ/画像のすべてのプロパティを保存するエンティティです:幅/高さ/ファイルパス...

エンティティギャラリーは、複数のメディア (同じ主題に関するビデオ/写真のギャラリー) をリンクする場合に便利です。

エンティティ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 のコレクションになります。

私が知っているギャラリーを扱うフォームはありません。

于 2015-03-15T21:07:52.207 に答える