Я использую symfony 3.4 с медиа-пакетом sonata.Использование 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')}} для записи кнопки загрузки и флажка для удаления загруженных файлов, включая метки,Это делается в классе \ sonata-project \ media-bundle \ src \ Forms \ Type \ MediaType.php в методе buildForm.
Теперь я хочу изменить этот метод 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 ...
}
}
Я получаю сообщение об ошибке Невозможно автоматически подключить службу «AppBundle \ Form \ SonataMediaBundle \ EwMediaType»: аргумент «$ pool» метода «Sonata \ MediaBundle \ Form \ Type \ MediaType :: __ construct ()» ссылается на класс «Sonata \ MediaBundle \ Provider \ Pool», но неттакой сервис существует.Возможно, вам следует связать этот класс с существующим сервисом «sonata.media.pool».
Я предполагаю, что мне нужно выполнить некоторые настройки, прежде чем я смогу расширить MediaType в своем собственном проекте.Я попытался с помощью следующего кода в моем services.yml
Sonata\MediaBundle\Provider\Pool:
tags: ['sonata.media.pool']
Но теперь возникает другая ошибка: Не удается автоматически подключить службу "AppBundle \ Form \ SonataMediaBundle \ EwMediaType": аргумент "$У класса "метода" Sonata \ MediaBundle \ Form \ Type \ MediaType :: __ construct () "нет подсказки типа, вы должны явно указать его значение.
Я новичок в Symfony и неочень знаком с его конфигурацией.Кто-нибудь может помочь мне перечислить шаги, которые мне нужно сделать, чтобы я мог расширить и изменить класс MediaType?
Большое спасибо.
Саша