【发布时间】:2014-08-19 14:45:27
【问题描述】:
所以我想从 SonataMediaBundle 的形式中删除“Unlink”thickbox 和“Binary content”:
我在谷歌上一无所获。我应该使用 Javascript 来隐藏它们吗?
【问题讨论】:
标签: javascript php sonata-admin symfony-sonata sonata-media-bundle
所以我想从 SonataMediaBundle 的形式中删除“Unlink”thickbox 和“Binary content”:
我在谷歌上一无所获。我应该使用 Javascript 来隐藏它们吗?
【问题讨论】:
标签: javascript php sonata-admin symfony-sonata sonata-media-bundle
我扩展了媒体类型表单以使取消链接复选框可选(基于 abadius 的回答):
# src/MyNamespace/AppBundle/Form/Extension/MediaTypeExtension.php
namespace MyNamespace\AppBundle\Form\Extension;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilderInterface;
class MediaTypeExtension extends AbstractTypeExtension
{
/**
* {@inheritdoc}
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'show_unlink' => true,
));
}
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
if (!$options['show_unlink']) {
$builder->add('unlink', 'hidden', array(
'mapped' => false,
'data' => false,
'required' => false,
));
}
}
/**
* {@inheritdoc}
*/
public function getExtendedType()
{
return 'sonata_media_type';
}
}
将其添加为表单扩展服务:
# Bundle config
mynamespace.form.type_extension.media:
class: MyNamespace\AppBundle\Form\Extension\MediaTypeExtension
tags:
-
name: form.type_extension
alias: sonata_media_type
这里你需要重写文件提供者来改变或移除标签(source):
# src/Application/Sonata/MediaBundle/Provider/FileProvider.php
namespace Application\Sonata\MediaBundle\Provider;
use Sonata\MediaBundle\Provider\FileProvider as BaseFileProvider;
use Symfony\Component\Form\FormBuilder;
class FileProvider extends BaseFileProvider
{
/**
* {@inheritdoc}
*/
public function buildMediaType(FormBuilder $formBuilder)
{
$formBuilder->add('binaryContent', 'file', array(
'label' => false,
));
}
}
并覆盖应用配置中的参数:
# app/config/config.yml
parameters:
sonata.media.provider.file.class: Application\Sonata\MediaBundle\Provider\FileProvider
【讨论】:
您可以删除取消链接复选框:
protected function configureFormFields(FormMapper $formMapper)
{
$fileFieldOptions = array(
'provider' => 'sonata.media.provider.file',
'context' => 'default',
'label' => 'File',
'required' => true
);
$formMapper
->add(
'file',
'sonata_media_type',
$fileFieldOptions
);
$formMapper->get('file')->remove('unlink');
}
【讨论】:
要隐藏取消链接,请在 MediaType.php 中的第 63 行附近更改此项:
$builder->add('unlink', 'hidden', array(
'mapped' => false,
'data' => false,
'required' => false
));
要删除二进制内容,我现在正在搜索...有人有解决方案吗?
最好的问候。
【讨论】:
在接受的答案中,您必须为 Symfony >= 3.1 添加 extended_type 选项 所以正确的服务注册是:
# Bundle config
mynamespace.form.type_extension.media:
class: MyNamespace\AppBundle\Form\Extension\MediaTypeExtension
tags:
-
name: form.type_extension
extended_type: 'Sonata\MediaBundle\Form\Type\MediaType'
alias: sonata_media_type
【讨论】:
在 malberts 提供的隐藏/覆盖标签的示例中,请记住,借助 formBuilder getOption 方法,您可以访问链接表单的当前小部件标签。
public function buildMediaType(FormBuilder $formBuilder)
{
$formBuilder->add('binaryContent', 'file', array(
'label' => $formBuilder->getOption('label'),
));
}
【讨论】:
从“sonata_media_type”类型的元素中完全删除元素“unlink”
示例集成表格:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add(
'mediaProfil',
'sonata_media_type',
array(
'provider' => 'sonata.media.provider.image',
'context' => 'teams',
'required' => false
)
);
$builder->get('mediaProfil')->remove('unlink');
}
或者在控制器内部:
public function editProfileAction()
{
/** @var \Symfony\Component\Form\Form $form */
$form = $this->container->get('sonata.user.profile.form');
$form->get('mediaProfil')->remove('unlink');
}
但是在sonataMedia中对元素'unlink'进行了显式调用
公关:https://github.com/sonata-project/SonataMediaBundle/pull/666
或者简单地添加到你的表单中:
// fix https://github.com/sonata-project/SonataMediaBundle/pull/666
$builder->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$event->getForm()->get('mediaProfil')->add('unlink', null, array('mapped' => false,));
}
);
【讨论】:
如果您喜欢媒体/管理中隐藏的取消链接和二进制内容,这对我有用
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('numerocamera')
->add('tipocamera')
->add('media', 'sonata_media_type', array(
'label'=> 'carica immagine 1',
'provider' => 'sonata.media.provider.image',
'context' => 'camere'
))
->add('media1', 'sonata_media_type', array(
'label'=> 'carica immagine 2',
'provider' => 'sonata.media.provider.image',
'context' => 'camere'
))
->add('media2', 'sonata_media_type', array(
'label'=> 'carica immagine 3',
'provider' => 'sonata.media.provider.image',
'context' => 'camere'
))
->add('media3', 'sonata_media_type', array(
'label'=> 'inserisci url video youtube 1',
'provider' => 'sonata.media.provider.youtube',
'context' => 'camere'
))
;
**$formMapper->get('media')->add('unlink', 'hidden', ['mapped' => false, 'data' => false])
->add('binaryContent', 'file', ['label' => false]);
$formMapper->get('media1')->add('unlink', 'hidden', ['mapped' => false, 'data' => false])
->add('binaryContent', 'file', ['label' => false]);
$formMapper->get('media2')->add('unlink', 'hidden', ['mapped' => false, 'data' => false])
->add('binaryContent', 'file', ['label' => false]);
$formMapper->get('media3')->add('unlink', 'hidden', ['mapped' => false, 'data' => false])
->add('binaryContent', 'url', ['label' => false]);
}**
【讨论】: