正确的方式显示虚拟实体从服务计算的字段值



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

config.yml

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

我的Sonata Admin类

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

和我的模板存在.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 %}

service DirectoriesManager具有别名DIRS_MANAGER。

我知道,在yii2中,可以为所有显示任何值的模型配置带有回调的GridView Widget列。可能我可以在ListMapper中做类似的事情?

我会为学说的后载事件添加侦听器回调。在该回调内部将使用服务并设置相应的布尔实体的值。

相关内容

  • 没有找到相关文章

最新更新