Estoy modificando la pantalla de administración de medios de Sonata Media Bundle para mostrar un nuevo campo. Después de usar la herramienta Easy Extends para extender el paquete, creo una clase muy pequeña para hacer esto con:
namespace App\Application\Sonata\MediaBundle\Admin\ORM; use Sonata\AdminBundle\Form\FormMapper; use Sonata\MediaBundle\Admin\ORM\MediaAdmin as BaseMediaAdmin; class MediaAdmin extends BaseMediaAdmin { /** * {@inheritdoc} */ protected function configureFormFields(FormMapper $formMapper) { parent::configureFormFields($formMapper); $formMapper ->add( 'language', null, [] ) ->end(); } } ... y agrego esto en mi archivo services.yaml :
sonata.media.admin.media: class: App\Application\Sonata\MediaBundle\Admin\ORM\MediaAdmin arguments: - '' - '%sonata.media.admin.media.entity%' - '%sonata.media.admin.media.controller%' - '@sonata.media.pool' - '@sonata.media.manager.category' tags: - { name: sonata.admin, manager_type: orm, group: admin, label: Seiten } public: true calls: - [ setModelManager, ["@sonata.media.admin.media.manager"] ] - [ setTranslationDomain, ["%sonata.media.admin.media.translation_domain%"] ] - [ setTemplates, [ inner_list_row : "@@SonataMedia/MediaAdmin/inner_row_media.html.twig", outer_list_rows_mosaic : "@@SonataMedia/MediaAdmin/list_outer_rows_mosaic.html.twig", base_list_field : "@@SonataAdmin/CRUD/base_list_flat_field.html.twig", list : "@@SonataMedia/MediaAdmin/list.html.twig", edit : "@@SonataMedia/MediaAdmin/edit.html.twig" ] ]Mientras el nuevo campo ("idioma") se carga en mi pantalla de administración en el CMS, ¡descubro que ahora solo tengo la mitad de los campos! Falta la pestaña "vista previa". Los campos de la pestaña "medios" están presentes, pero la pestaña ahora está etiquetada como "páginas".
¿Alguna idea sobre lo que podría estar pasando aquí?
Resulta que no tuve que pasar por toda la danza barroca de volver a declarar el servicio con todas las dependencias. En cambio, todo lo que tenía que hacer en services.yaml era crear una nueva clave de parámetro que apuntara a mi clase personalizada:
parameters: locale: 'de' ... sonata.media.admin.media.class: 'App\Application\Sonata\MediaBundle\Admin\ORM\MediaAdmin'Después de eso, todo funcionó perfectamente. ¡Boffo!