如何在 url @admin_sonata_media_media_create 从 sonata_type_model_list 删除类别
How to remove category from sonata_type_model_list at url @admin_sonata_media_media_create
我在用户实体(头像)中使用媒体。
一开始我用的是sonata_media_type。效果不错。
问题是我正在使用 ManyToOne - 因此管理员可以 select 从列表中选择一个。为此,我必须使用 sonata_type_model_list - 这具有列表、新建、删除操作。我通过 'btn_delete' => '' 删除了 delete。这里的列表操作效果很好(到目前为止)。
真正的问题在于新操作。 新操作 window 从 ajax 加载 - 它有 File/Reference,类别 (两个字段)。
这里我需要完全删除类别字段(列出、新建、删除)。我们为什么需要这个?因为没用!
- LIST - 仅显示 'context' => 'profile' 来自
'link_parameters'。所以这里的LIST动作是没有用的。
- NEW - 新动作可以创建新上下文,但不会显示在
列表(现在)。所以我不需要这个。如果我需要,我会创建
分类包。
- DELETE - 删除操作无效(现在 - 此处)。
我的研究:
我试图修改模板 - 但找不到正确的树枝文件。它指向 parent() - 指向管理包!
验证 File/Reference - 我创建了自己的 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');
}
-
从媒体弹出窗口中删除类别字段
- 您需要通过覆盖 class 参数
sonata.media.admin.media.class
来覆盖媒体管理员的 class
- 创建您自己的管理员 class 并使用 sonata media 的基础管理员 class 对其进行扩展 class。
- 通过在您的管理 class
中定义来覆盖 configureFormFields()
方法
- 从
$formMapper
中删除类别字段
覆盖奏鸣曲媒体 class
parameters:
sonata.media.admin.media.class: Your\MediaBundle\Admin\ORM\MediaAdmin
媒体管理员Class
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 );
}
}
}
我通过隐藏类别字段解决了这个问题。如果我完全删除它有时会导致问题。安全就是躲起来。
为了实现这一点,我根据 sonata-media 文档使用自定义提供程序 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');
}
}
我在用户实体(头像)中使用媒体。
一开始我用的是sonata_media_type。效果不错。
问题是我正在使用 ManyToOne - 因此管理员可以 select 从列表中选择一个。为此,我必须使用 sonata_type_model_list - 这具有列表、新建、删除操作。我通过 'btn_delete' => '' 删除了 delete。这里的列表操作效果很好(到目前为止)。
真正的问题在于新操作。 新操作 window 从 ajax 加载 - 它有 File/Reference,类别 (两个字段)。
这里我需要完全删除类别字段(列出、新建、删除)。我们为什么需要这个?因为没用!
- LIST - 仅显示 'context' => 'profile' 来自 'link_parameters'。所以这里的LIST动作是没有用的。
- NEW - 新动作可以创建新上下文,但不会显示在 列表(现在)。所以我不需要这个。如果我需要,我会创建 分类包。
- DELETE - 删除操作无效(现在 - 此处)。
我的研究:
我试图修改模板 - 但找不到正确的树枝文件。它指向 parent() - 指向管理包!
验证 File/Reference - 我创建了自己的 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');
}
-
从媒体弹出窗口中删除类别字段
- 您需要通过覆盖 class 参数
sonata.media.admin.media.class
来覆盖媒体管理员的 class
- 创建您自己的管理员 class 并使用 sonata media 的基础管理员 class 对其进行扩展 class。
- 通过在您的管理 class 中定义来覆盖
- 从
$formMapper
中删除类别字段
configureFormFields()
方法
覆盖奏鸣曲媒体 class
parameters:
sonata.media.admin.media.class: Your\MediaBundle\Admin\ORM\MediaAdmin
媒体管理员Class
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 );
}
}
}
我通过隐藏类别字段解决了这个问题。如果我完全删除它有时会导致问题。安全就是躲起来。
为了实现这一点,我根据 sonata-media 文档使用自定义提供程序 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');
}
}