修改Sonata Media Bundle后预览标签页消失问题咨询
问题原因
- 表单标签页结构被破坏:你在重写
configureFormFields方法时,调用父类方法后额外多执行了一次->end(),父类方法执行完成后已经正确关闭了所有表单分组,多余的end()会打乱表单的层级结构,导致后续定义的preview标签页无法正常渲染。同时你新增language字段时没有指定所属分组,字段直接插入到表单外层也会破坏原有分组逻辑。 - 标签名称被修改:你在
services.yaml中重写Sonata Media Admin服务时,tags配置项的label参数设置为了Seiten(德语“页面”的意思),覆盖了原有的Media标签名称,所以显示为pages/页面。
解决办法
1. 调整MediaAdmin类的表单配置
修改configureFormFields方法,指定新增字段所属的分组,删除多余的end()调用,示例代码如下:
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 // 指定将language字段添加到media分组中 ->with('media') ->add('language', null, []) ->end(); } }
如果你希望language字段单独放在新的标签页,直接自定义新的分组即可:
$formMapper ->with('自定义标签名') ->add('language') ->end();
2. 调整services.yaml配置
将服务配置tags中的label参数改为你需要的名称,改回原默认的Media即可恢复原有标签名:
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: # 修改label为你需要的名称,默认是Media - { name: sonata.admin, manager_type: orm, group: admin, label: Media } 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" ] ]
调整完成后清空缓存,即可恢复原有标签页和标签名称,同时保留你新增的language字段。
内容的提问来源于stack exchange,提问作者Mayor of the Plattenbaus
相关产品推荐
相关产品推荐

