显示服务计算的虚拟实体字段值的正确方法是什么

What is right way showing virtual entitys field value which computing from service

我有一个实体 "File",我想显示文件系统中现有相关文件的布尔值。为了检查是否存在,需要使用我的 DirectoriesManager 服务,它可以检测到它使用了这个文件实体。这个任务配置ListMapper的正确方法是什么还是只能重写一些奏鸣曲模板才能解决?
所以,我做了什么:

config.yml

twig:
    debug: '%kernel.debug%'
    strict_variables: '%kernel.debug%'
    globals:
        container: '@service_container'

我的奏鸣曲管理员class

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->add('id')
        ->add('exist', null, [
            'template' => 'AdminBundle:Files:exist.html.twig'
        ]);
}

还有我的模板exist.html.twig

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field %}

{% set value = container.get('dirs_manager').entityFileExist(object) %}

{% if value %}
    {% set text = 'label_type_yes'|trans({}, 'SonataAdminBundle') %}
{% else %}
    {% set text = 'label_type_no'|trans({}, 'SonataAdminBundle') %}
{% endif %}

{% if  value %}
    {% set class = 'label-success' %}
{% else %}
    {% set class = 'label-danger' %}
{% endif %}

<span class="label {{ class }}">{{ text }}</span>
{% endblock %}

其中服务 DirectoriesManager 有别名 dirs_manager。

我知道在 Yii2 中可以为显示任何值的所有模型配置带有回调的 GridView 小部件列。也许我可以在 ListMapper 中制作类似的东西?

我会为 doctrine 的 postLoad 事件添加侦听器回调。在该回调中将使用该服务并设置相应的布尔实体的值。