Что является правильным способом, показывающим значение поля виртуальных сущностей, которое вычисляется из сервиса

У меня есть сущность «Файл», и я хочу показать логическое значение существующего связанного файла в файловой системе. Для проверки существования нужно использовать мой сервис DirectoriesManager, который может обнаружить, что использует этот объект File. Как правильно настроить 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 %}

Где служба DirectoriesManager имеет псевдоним dirs_manager.

Я знаю, что в Yii2 можно настроить столбцы виджетов GridView с обратным вызовом для всех моделей, которые показывают любое значение. Может быть, я могу сделать что-то вроде в ListMapper?

-1

Решение

Я бы добавил обратный вызов слушателя для события postLoad доктрины. И внутри этого обратного вызова будет использовать службу и установить соответствующее значение логического объекта.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]