Symfony SonataMediaBundle добавить галерею только ImageProvider Media

Я использую 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, чтобы каждый новый Media был изображением 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: ~

1

Решение

Попробуй это.

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

Выберите файл

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]