2

所以我想从 SonataMediaBundle 的形式中删除“Unlink”thickbox 和“Binary content”:

在此处输入图像描述

我在谷歌上一无所获。我应该使用 Javascript 来隐藏它们吗?

4

7 回答 7

9

取消链接

我扩展了媒体类型表单以使取消链接复选框可选(基于 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
于 2014-09-30T15:12:24.220 回答
3

您可以使用以下方法删除取消链接复选框:

  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');
    } 
于 2016-10-24T15:12:10.863 回答
1

要隐藏取消链接,请在 Type 中的 MediaType.php 中的第 63 行附近更改此内容:

$builder->add('unlink', 'hidden', array(
        'mapped'   => false,
        'data'     => false,
        'required' => false
    ));

删除二进制内容,我现在正在寻找......有人有解决方案吗?

此致。

于 2014-08-21T21:43:07.697 回答
1

在接受的答案中,您必须为 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
于 2018-01-20T18:35:25.910 回答
0

在 malberts 提供的隐藏/覆盖标签的示例中,请记住,由于 formBuilder getOption 方法,您可以访问链接表单的当前小部件标签。

public function buildMediaType(FormBuilder $formBuilder)
{
    $formBuilder->add('binaryContent', 'file', array(
        'label' => $formBuilder->getOption('label'),
    ));
}
于 2014-11-12T15:32:06.790 回答
0

从“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,));
        }
    );
于 2014-11-18T09:45:47.827 回答
0

如果您喜欢来自媒体/管理员的隐藏取消链接和二进制内容,这对我有用

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]); 
}**
于 2016-07-29T19:10:35.797 回答