Symfony SonataMediaBundle 仅添加 ImageProvider Media 的 Gallery
Symfony SonataMediaBundle add Gallery only of ImageProvider Media
我正在使用 SonataMediaBundle 并想将图片库添加到实体,比方说广告。每个 Ad 都有一个 Gallery,可以有多个 Media。我也一直在关注 ,它非常有用。
我已经做到了,我可以将画廊添加到我的实体并将所有类型的媒体添加到该画廊,但我想要的是在后端跳过添加媒体时的提供商 selection到画廊,并自动 select 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;
}
在广告奏鸣曲管理员中class:
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
传递给每个正在创建的 GalleryHasMedia 而不是 Gallery 表单,以便每个新媒体都是 ImageProvider 的图像并获得该提供者的验证(扩展名、MIME 类型、缩略图等)
表格是这样的
打开此模式 window 我可以在其中将 GalleryHasMedia 添加到图库。
我想要的是在添加媒体时,此模式选择不显示提供者,而是自动 select ImageProvider。是否可以在管理 class 的嵌套表单值中传递 link_parameters' => array('provider' => 'sonata.media.provider.youtube')
?
可能吗?我是否必须在我的管理员 class 中修改它或覆盖其他一些 form/class?
添加了我的 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: ~
试试这个。
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.
我正在使用 SonataMediaBundle 并想将图片库添加到实体,比方说广告。每个 Ad 都有一个 Gallery,可以有多个 Media。我也一直在关注
我已经做到了,我可以将画廊添加到我的实体并将所有类型的媒体添加到该画廊,但我想要的是在后端跳过添加媒体时的提供商 selection到画廊,并自动 select 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;
}
在广告奏鸣曲管理员中class:
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
传递给每个正在创建的 GalleryHasMedia 而不是 Gallery 表单,以便每个新媒体都是 ImageProvider 的图像并获得该提供者的验证(扩展名、MIME 类型、缩略图等)
表格是这样的
打开此模式 window 我可以在其中将 GalleryHasMedia 添加到图库。
我想要的是在添加媒体时,此模式选择不显示提供者,而是自动 select ImageProvider。是否可以在管理 class 的嵌套表单值中传递 link_parameters' => array('provider' => 'sonata.media.provider.youtube')
?
可能吗?我是否必须在我的管理员 class 中修改它或覆盖其他一些 form/class?
添加了我的 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: ~
试试这个。
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.