所以我想从 SonataMediaBundle 的形式中删除“Unlink”thickbox 和“Binary content”:
我在谷歌上一无所获。我应该使用 Javascript 来隐藏它们吗?
所以我想从 SonataMediaBundle 的形式中删除“Unlink”thickbox 和“Binary content”:
我在谷歌上一无所获。我应该使用 Javascript 来隐藏它们吗?
我扩展了媒体类型表单以使取消链接复选框可选(基于 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
在这里,您需要覆盖 File 提供程序以更改或删除标签(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');
}
要隐藏取消链接,请在 Type 中的 MediaType.php 中的第 63 行附近更改此内容:
$builder->add('unlink', 'hidden', array(
'mapped' => false,
'data' => false,
'required' => false
));
删除二进制内容,我现在正在寻找......有人有解决方案吗?
此致。
在接受的答案中,您必须为 Symfony >= 3.1添加扩展类型选项,因此正确的服务注册是:
# 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]);
}**