Symfony3.1 & Sonata Admin - 列表字段的模板被忽略

Posted

技术标签:

【中文标题】Symfony3.1 & Sonata Admin - 列表字段的模板被忽略【英文标题】:Symfony3.1 & Sonata Admin - list field's template is ignored 【发布时间】:2017-06-30 12:50:02 【问题描述】:

我将 Sonata Admin 3.13 与 Symfony 3.1 一起使用,并希望在列表视图中显示上传的图像。我有一个带有以下 ListFields 的 PaintingAdmin:

protected function configureListFields(ListMapper $listMapper)

    $listMapper
        ->addIdentifier('name', null, ['label' => 'Name'])
        ->add('category', null, ['label' => 'Kategorie'])
        ->add('size', null, ['label' => 'Größe'])
        ->add('imageFilename', null, [
            'template' => 'sonata:imagepreview.html.twig',
            'label' => 'Bild'
        ]);
    ;

还有一个app/Resources/views/sonata/imagepreview.html.twig 的模板

% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %
% block field %
    <div>
        % if object.imageFilename != null %
            <img src=" asset('uploads/images/' ~ object.imageFilename) " class="img-responsive" />
        % else %
            <div class="warn">Kein Bild</div>
        % endif %
    </div>
% endblock %

但模板被完全忽略,它只显示值imageFilename。其他一切正常(即label 显示为Bild

【问题讨论】:

你找到解决办法了吗?我也面临这个问题! 【参考方案1】:

您需要告诉 Sonata 您正在使用自定义模板。

您可以在您的管理服务声明中执行此操作:

librinfo_crm.admin.organism:
        class: Librinfo\CRMBundle\Admin\OrganismAdmin
        arguments: [~, Librinfo\CRMBundle\Entity\Organism, LibrinfoCRMBundle:OrganismAdmin]
        tags:
            -   name: sonata.admin
                manager_type: orm
                group: Customers Relationship Management
                label: librinfo.crm.organism_admin.label
                label_translator_strategy: blast_core.label.strategy.librinfo
        calls:
            - [ setTemplate, [list, LibrinfoCRMBundle:OrganismAdmin:list.html.twig]]

或者你可以覆盖你的管理类的 $templates array()。

如果你想使用 'classic' symfony 模板继承,你的自定义模板应该与原来的路径名称相同,所以如果你想替换 SonataAdminBundle:CRUD:base_list_field.html.twig,你的自定义模板应该在 app/Resources/view/CRUD/base_list_field.html.twig

【讨论】:

【参考方案2】:

我建议您使用模板的完整路径: app/Resources/views/sonata/imagepreview.html.twig

    ->add('imageFilename', null, [
        'template' => 'sonata\imagepreview.html.twig',
        'label' => 'Bild'
    ]);

所以,sonata\imagepreview.html.twig 是相对于 app/Resources/views/ 文件夹的。

    包内

    RealPath: `src\AppBundle\Resources\views\MyCustomFolder\my_file.html.twig`
    
    Path: `AppBundle::MyCustomFolder\my_file.html.twig`
    

    在应用文件夹中的捆绑包之外

    RealPath: `app\Resources\views\MyCustomFolder\my_file.html.twig`
    
    Path: `MyCustomFolder\my_file.html.twig`
    

您可以在Official Symfony documantation阅读更多内容

【讨论】:

以上是关于Symfony3.1 & Sonata Admin - 列表字段的模板被忽略的主要内容,如果未能解决你的问题,请参考以下文章

Symmfony & Sonata:如何从 AbstractAdmin 扩展访问 EntityManagerInterface?

Sonata Admin,内联编辑实体

扩展 Sonata 用户包和自定义操作

Sonata mongodb admin bundle filter by reference

我无法在 symfony3.1 项目中安装 JMSSerializerBundle

如何在 Sonata/Symfony 3.3 中设置内容配置?