Symfony Sonata Admin Bundle - 将带有树枝模板的自定义字段导出到 XLS

Posted

技术标签:

【中文标题】Symfony Sonata Admin Bundle - 将带有树枝模板的自定义字段导出到 XLS【英文标题】:Symfony Sonata Admin Bundle - export custom fields with twig templates to XLS 【发布时间】:2018-09-27 02:37:51 【问题描述】:

代码

我的奏鸣曲管理类代码:

class UsersAdmin extends AbstractAdmin

.....
    protected function configureListFields(ListMapper $listMapper)
    

        $listMapper
            ->add('getSummaryTimeInGame','string',[
                'label'    => 'Summary time in game',
                'template' =>'AdminBundle::get_summary_time_in_game.html.twig'
            ])
            ->add('getPercentTasksDone', 'string', [
                'label'    => 'Percents tasks done',
                'template' => 'AdminBundle::get_percent_tasks_done.html.twig'
            ])
    

   public function getExportFields()
   
       return [
            'Name'     => 'name',
            'Surname'  => 'surname',
            'Summary time in game' => 'getSummaryTimeInGame',
            'Percents tasks done'  => 'getPercentTasksDone',
       ];
   

.....

问题

字段“getSummaryTimeInGame”和“getPercentTasksDone”在数据网格列表视图中可见,但在导出到 XLS 时,它们是空白的

如何在 XLS 导出时正确列出这些字段?

【问题讨论】:

getSummaryTimeInGame 和 getPercentTasksDone 都是链接实体上的现有方法? @AirBair 这些方法在链接实体中不存在。这些字段的值的自定义逻辑在树枝模板中(在 $listMapper 中作为参数“模板”给出) 这就是为什么它不起作用!导出操作独立于列表配置。导出字段中的值必须与链接实体中的属性或方法的名称相对应。根据文档:sonata-project.org/bundles/admin/3-x/doc/reference/… @AirBar 那么,如何在导出的字段中包含自定义逻辑值?我想在树枝模板中使用我的服务来获得价值。向实体注入服务不是一个好习惯。 【参考方案1】:

在您的用户实体(链接到此管理类的实体)中创建这两个函数。

public function getSummaryTimeInGame
    // return the desired calculated value.


public function getPercentTasksDone()
    // return the desired calculated value.

在此导出您的工作表后,将在您的文件中获取这些值。

【讨论】:

以上是关于Symfony Sonata Admin Bundle - 将带有树枝模板的自定义字段导出到 XLS的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 3 Sonata Admin 使用注释创建管理员

Symfony 4 + Sonata + Sonata Doctrine ORM Admin Bundle:错误:没有要处理的元数据类

Symfony - Sonata Abstract Admin 和 getDoctrine

Symfony 3 上的 Sonata Admin 实体翻译

Symfony - Sonata “在管理池中找不到管理服务“app.admin.post”。”

CKEditorType 在 symfony sonata admin 中显示文本区域