1

私は SonataMediaBundle を使用しており、画像のギャラリーをエンティティに追加したいと考えています。各広告には、複数のメディアを持つことができるギャラリーがあります。私もこの他の回答に従ってきましたが、かなり役に立ちました。

ギャラリーをエンティティに追加し、あらゆる種類のメディアをそのギャラリーに追加できますが、バックエンドで、メディアがギャラリーに追加されたときにプロバイダーの選択をスキップし、ImageProvider を自動的に選択する必要があります。 、画像のみのギャラリーを作成できるようにします。

class Ad
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255,nullable=true)
     */
    private $adTitle;

    /**
     * @GalleryHasMoreThanNineMedia
     * @ORM\OneToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Gallery",mappedBy="ad",cascade={"persist"})
     * @ORM\JoinColumn(name="gallery", referencedColumnName="id",nullable=true)
     */
    private $gallery;
}

アド ソナタの管理者クラスでは、次のようになります。

 protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('adTitle')   
            ->add('gallery', 'sonata_type_model_list', array(
                'cascade_validation' => true,
                'required' => false,
            ), array(
                    'edit' => 'inline',
                    'inline' => 'table',
                    'sortable' => 'position',
                    'link_parameters' => array('provider' => 'sonata.media.provider.image'),
                    'admin_code' => 'sonata.media.admin.gallery',
                )
            );
    }

どういうわけかlink_parameters、Gallery フォームではなく、作成される各 GalleryHasMedia に渡す必要があるため、新しいメディアのそれぞれが ImageProvider のイメージであり、そのプロバイダーの検証 (拡張子、MIME タイプ、サムネイルなど) を取得します。

というわけでフォームはこんな感じ

ここに画像の説明を入力

このモーダル ウィンドウが開き、GalleryHasMedia をギャラリーに追加できます。

ここに画像の説明を入力

私が欲しいのは、メディアを追加するときに、このモーダルが表示されないようにするプロバイダーを選択することですが、代わりに ImageProvider を自動的に選択します。link_parameters' => array('provider' => 'sonata.media.provider.youtube')admin クラスでネストされたフォームの値を渡すことは可能ですか?

ここに画像の説明を入力

出来ますか?管理者クラスで変更するか、他のフォーム/クラスを上書きする必要がありますか?

私のSonataMedia構成を追加しました:

sonata_media:
    # if you don't use default namespace configuration
    #class:
    #    media: MyVendor\MediaBundle\Entity\Media
    #    gallery: MyVendor\MediaBundle\Entity\Gallery
    #    gallery_has_media: MyVendor\MediaBundle\Entity\GalleryHasMedia
    db_driver: doctrine_orm # or doctrine_mongodb, doctrine_phpcr it is mandatory to choose one here
    default_context: default # you need to set a context
    contexts:
        default:  # the default context is mandatory
            providers:
                - sonata.media.provider.dailymotion
                - sonata.media.provider.youtube
                - sonata.media.provider.image
                - sonata.media.provider.file
                - sonata.media.provider.vimeo
            formats:
                small: { width: 100 , quality: 70}
                big:   { width: 500 , quality: 70}
        profile_pics:  # the default context is mandatory
            providers:
                - sonata.media.provider.image
            formats:
                small: { width: 100 , quality: 70}
                big:   { width: 500 , quality: 70}
        personal_albums:
            download:
                strategy: sonata.media.security.private_strategy
                mode: http
            providers:
                - sonata.media.provider.image
                - sonata.media.provider.file
                - sonata.media.provider.private
            formats:
                default:  { width: 100 , quality: 70}
    cdn:
        server:
            path: %cdn_server_path% # http://media.sonata-project.org/

    filesystem:
        local:
            directory:  %kernel.root_dir%/../web/uploads/media
            create:     true
    providers:
        #image:
        #    resizer: false
        file:
            service:    sonata.media.provider.file
            resizer:    false
            filesystem: sonata.media.filesystem.local
            cdn:        sonata.media.cdn.server
            generator:  sonata.media.generator.default
            thumbnail:  sonata.media.thumbnail.format
            allowed_extensions: ['mp4','pdf', 'txt', 'rtf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pttx', 'odt', 'odg', 'odp', 'ods', 'odc', 'odf', 'odb', 'csv', 'xml']
            allowed_mime_types: ['video/mp4','application/pdf', 'application/x-pdf', 'application/rtf', 'text/html', 'text/rtf', 'text/plain']
    buzz:
        connector:  sonata.media.buzz.connector.file_get_contents

doctrine:
    orm:
        entity_managers:
            default:
                mappings:
                    ApplicationSonataMediaBundle: ~
                    SonataMediaBundle: ~
4

1 に答える 1

2

これを試して。

config.ymlここで、許可されたプロバイダーを定義します。

sonata_media:

    #...

    contexts:

        #...

        your_context:
            providers:
                - sonata.media.provider.image

            formats:
                admin: { width: 55 , height: 55 , quality: 80}
                small: { width: 75 , quality: 80}
                medium: { width: 125 , quality: 80}
                big: { width: 265 , quality: 80}

Entity.php

//...


/**
 * @ORM\OneToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Gallery",cascade={"all"}, orphanRemoval=true)
 * @ORM\JoinColumn(name="gallery", referencedColumnName="id")
 */
  private $gallery;

//...

EntityAdmin.php では、許可されたプロバイダーでカスタム コンテキストを定義します。

//...

class EntityAdmin extends Admin {

    //...

    // Fields to be shown on create/edit forms
    protected function configureFormFields(FormMapper $formMapper) {

        //...

        $formMapper
                    ->add('gallery', 'sonata_type_model_list', array(
                        'btn_list' => false,
                        'help' => 'Your help text',
                            ), array(
                        'link_parameters' => array(
                            'context' => 'your_context'
                        ))
                    );

        //...

    }

    //...
}

これが役立つことを願っています。

手順は次のとおりです。

ステップ1。

新しく作る

ステップ2。

新しく追加する

ステップ 3。

新しく追加する

ステップ 4。

ファイルを選ぶ

于 2016-03-09T23:46:58.487 に答える