我正在使用用户实体中的媒体(头像)。
起初我使用了sonata_media_type。它运作良好。
问题是我正在使用ManyToOne - 所以管理员可以从列表中选择一个。为了实现这一点,我必须使用sonata_type_model_list - 这有list,new,delete动作。我通过'btn_delete'=>删除了删除''。列表操作在这里运行良好(截至目前)。
真正的问题是新的行动。新的行动窗口从ajax加载 - 它有文件/参考,类别(两个字段)。
在这里,我需要完全删除类别字段(列表,新建,删除)。我们为什么需要这个?因为它没用!
我的研究
我尝试修改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');
}
-
答案 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');
}
}