簡體   English   中英

sonata媒體包修改MediaType

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM