如何从url @admin_sonata_media_media_create中的sonata_type_model_list中删除类别

时间:2016-07-11 13:54:56

标签: symfony sonata-media-bundle

我正在使用用户实体中的媒体(头像)。

起初我使用了sonata_media_type。它运作良好。

问题是我正在使用ManyToOne - 所以管理员可以从列表中选择一个。为了实现这一点,我必须使用sonata_type_model_list - 这有list,new,delete动作。我通过'btn_delete'=>删除了删除''。列表操作在这里运行良好(截至目前)。

真正的问题是新的行动。新的行动窗口从ajax加载 - 它有文件/参考,类别(两个字段)。

在这里,我需要完全删除类别字段(列表,新建,删除)。我们为什么需要这个?因为它没用!

  • 列表 - 仅显示'context'=> 'profile'来自 'link_parameters'。所以这里的LIST行动毫无用处。
  • NEW - 新操作可以创建新的上下文,但不会显示在 列表(现在)。所以我不需要这个。如果我需要我会创造 ClassificationBundle。
  • 删除 - 删除操作无效(现在 - 此处)。

enter image description here

我的研究

我尝试修改TEMPLATE - 但我找不到正确的twig文件。它指向parent() - 它指向admin bundle!

验证文件/参考 - 我创建了自己的ImageProvider(根据文档) - 它可以正常工作(验证)。

我尝试删除类别字段(检查图像) - 但失败了。

我的代码是:

    class ImageProvider extends BaseProvider{...}
        public function buildCreateForm(FormMapper $formMapper) {
// This works - changed File/Reference to ok
            $formMapper->add('binaryContent', 'file', array('label' => 'ok',
                'constraints' => array(
                    new NotBlank(),
                ),
            ));
// This works - added a new text field
            $formMapper->add('context', 'text', ['attr' => ['class' => 'fz_rocks']]);
// This not working - also ->add('category') - has no effect even when attr=hide and so on..
            $formMapper->remove('category');
        }

-

2 个答案:

答案 0 :(得分:1)

从媒体弹出窗口中删除类别字段

  • 您需要通过覆盖类参数sonata.media.admin.media.class来覆盖媒体管理员的课程
  • 创建自己的管理类,并使用奏鸣曲媒体的基本管理类扩展它。
  • 通过在管理类中定义
  • 来覆盖configureFormFields()方法
  • $formMapper
  • 中删除类别字段

覆盖Sonata媒体类

parameters:
    sonata.media.admin.media.class: Your\MediaBundle\Admin\ORM\MediaAdmin

媒体管理类

namespace Your\MediaBundle\Admin\ORM;

use Sonata\MediaBundle\Admin\ORM\MediaAdmin as Admin;
// .. Other use statements 

class MediaAdmin extends Admin {

    /**
     * {@inheritdoc}
     */
    protected function configureFormFields( FormMapper $formMapper ) {
        $media = $this->getSubject();

        if ( ! $media ) {
            $media = $this->getNewInstance();
        }

        if ( ! $media || ! $media->getProviderName() ) {
            return;
        }

        $formMapper->add( 'providerName', 'hidden' );

        $formMapper->getFormBuilder()->addModelTransformer( new ProviderDataTransformer( $this->pool, $this->getClass() ), true );

        $provider = $this->pool->getProvider( $media->getProviderName() );

        if ( $media->getId() ) {
            $provider->buildEditForm( $formMapper );
        } else {
            $provider->buildCreateForm( $formMapper );
        }

    }

}

答案 1 :(得分:0)

我通过隐藏Categoy字段解决了问题。如果我完全删除它有时会导致问题。安全就是隐藏。

为实现这一点,我使用自定义提供程序,根据sonata-media doc creating_a_provider_class.rst

namespace Application\Sonata\MediaBundle\Provider;
class ImageProvider extends BaseProvider {
    public function buildCreateForm(FormMapper $formMapper) {
        $formMapper->add('binaryContent', 'file', ['label' => 'Upload a new file', 'constraints' => [new NotBlank(), new NotNull()]])->end();
        $formMapper->with('General', ['class' => 'hidden'])->add('category');
    }
    public function buildEditForm(FormMapper $formMapper) {
        parent::buildEditForm($formMapper);
        $formMapper->add('binaryContent', 'file', ['label' => 'Upload a new file', 'required' => FALSE])->end();
        $formMapper->with('General', ['class' => 'hidden'])->add('category');
    }
}