【问题标题】:SonataMediaBundle : a way to remove unlink thickboxSonataMediaBundle:一种删除 unlink 厚盒的方法
【发布时间】:2014-08-19 14:45:27
【问题描述】:

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

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

【问题讨论】:

    标签: javascript php sonata-admin symfony-sonata sonata-media-bundle


    【解决方案1】:

    取消链接

    我扩展了媒体类型表单以使取消链接复选框可选(基于 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
    

    【讨论】:

    • 所有这些都针对一个复选框 :(
    • 我正在尝试删除“二进制内容”,但此代码不适用于 Symfony 2.7.7 :( 有什么想法吗?
    【解决方案2】:

    您可以删除取消链接复选框:

      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');
        } 
    

    【讨论】:

    • 快速清洁选项
    【解决方案3】:

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

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

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

    最好的问候。

    【讨论】:

    • 非常感谢这个问题,下一步是删除二进制内容
    【解决方案4】:

    在接受的答案中,您必须为 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
    

    【讨论】:

      【解决方案5】:

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

      public function buildMediaType(FormBuilder $formBuilder)
      {
          $formBuilder->add('binaryContent', 'file', array(
              'label' => $formBuilder->getOption('label'),
          ));
      }
      

      【讨论】:

        【解决方案6】:

        从“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,));
                }
            );
        

        【讨论】:

        【解决方案7】:

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

        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]); 
        }**
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-26
          • 1970-01-01
          • 1970-01-01
          • 2016-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多