[英]sonata media bundle modify MediaType
我使用symfony 3.4和sonata媒体包。 在表单中使用MediaType可以正常工作:
$this->builder->->add('document', MediaType::class,
['label' => 'Document',
'provider' => 'sonata.media.provider.file',
'context' => 'default']) ;
现在我想修改MediaType生成的字段。
我刚刚将Twig Template \\ vendor \\ sonata-project \\ media-bundle \\ src \\ Resources \\ views \\ Form \\ media_widgets.html.twig复制到我的项目( \\ AppBundle \\ SonataMediaBundle \\ views \\ Form ),现在我可以修改了布局。 这么久,一切都很好。
模板最终使用{{block('form_widget')}}来写出上传按钮和复选框以删除包含标签的上传文件。 这是在buildForm方法的\\ sonata-project \\ media-bundle \\ src \\ Forms \\ Type \\ MediaType.php类中完成的。
现在我想修改这个buildForm方法。 修改供应商包中的类不是一个好习惯,所以我想创建一个新类,扩展MediaType类并覆盖buildForm方法,如下所示:
namespace AppBundle\Form\SonataMediaBundle ;
class MyMediaType extends \Sonata\MediaBundle\Form\Type\MediaType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
... copy code from original MediaType class and modify it after my needs ...
... e.g. just remove the unlink checkbox ...
}
}
我收到错误消息
在我可以在我自己的项目中扩展MediaType之前,我假设我必须做一些配置。 我试着在services.yml中使用以下代码
Sonata\MediaBundle\Provider\Pool:
tags: ['sonata.media.pool']
但现在发生另一个错误:
我是symfony的新手,对它的配置不是很熟悉。 任何人都可以帮我一个列表,我需要做的步骤,所以我可以扩展和修改MediaType类?
非常感谢。
萨沙
您可以执行以下操作。 您需要创建自定义服务定义。
AppBundle\Form\Type\CustomMediaType:
class: AppBundle\Form\Type\CustomMediaType
autowire: true
autoconfigure: true
arguments:
- "@sonata.media.pool"
- "Application\\Sonata\\MediaBundle\\Entity\\Media"
然后在CustomMediaType中按照正常情况创建表单类型。
namespace AppBundle\Form\Type;
use Sonata\MediaBundle\Form\Type\MediaType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\UrlType;
use Symfony\Component\OptionsResolver\OptionsResolver;
class CustomMediaType extends MediaType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
]);
}
public function getBlockPrefix()
{
return 'custom_media_type';
}
public function getParent()
{
return MediaType::class;
}
}
然后在你的枝条包含的某个地方,你可以添加你的自定义HTML ...
{% block custom_media_type_widget %}
// Your HTML here
{% endblock %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.