gpt4 book ai didi

symfony - 奏鸣曲媒体包修改 MediaType

转载 作者:行者123 更新时间:2023-12-02 12:28:53 26 4
gpt4 key购买 nike

我使用 symfony 3.4 和奏鸣曲媒体包。在表单中使用 MediaType 效果很好,如下所示:

$this->builder->->add('document', MediaType::class,
['label' => 'Document',
'provider' => 'sonata.media.provider.file',
'context' => 'default']) ;

现在我想修改 MediaType 生成的字段。

我刚刚将 Twig 模板 \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 ...
}
}

我收到一条错误消息无法 Autowiring 服务“AppBundle\Form\SonataMediaBundle\EwMediaType”:方法“Sonata\MediaBundle\Form\Type\MediaType::__construct()”的参数“$pool”引用类“Sonata\MediaBundle\Provider\Pool”但不存在这样的服务。您也许应该将此类别名为现有的“sonata.media.pool”服务。

我认为我必须先进行一些配置,然后才能在我自己的项目中扩展 MediaType。我在 services.yml

中尝试使用以下代码
Sonata\MediaBundle\Provider\Pool: 
tags: ['sonata.media.pool']

但是现在又出现了一个错误:无法 Autowiring 服务“AppBundle\Form\SonataMediaBundle\EwMediaType”:方法“Sonata\MediaBundle\Form\Type\MediaType::__construct()”的参数“$class”没有类型提示,您应该配置其值明确地。

我对 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;
}
}

然后在您的 Twig 内含物中的某个位置,您可以添加自定义 HTML...

{% block custom_media_type_widget %}
// Your HTML here
{% endblock %}

关于symfony - 奏鸣曲媒体包修改 MediaType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50432314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com