Я использую 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') }} для записи кнопки загрузки и флажка для удаления загруженных файлов, включая метки. Это делается в классе \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 ...
}
}
Я получаю сообщение об ошибке Cannot autowire service "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": аргумент "$class" метода "Sonata\MediaBundle\Form\Type\MediaType::__construct()" не имеет подсказки типа , вы должны указать его значение явно.
Я новичок в symfony и не очень хорошо знаком с его конфигурацией. Может ли кто-нибудь помочь мне составить список шагов, которые мне нужно сделать, чтобы я мог расширить и изменить класс MediaType?
Большое спасибо.
Саша