显示服务计算的虚拟实体字段值的正确方法是什么
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 事件添加侦听器回调。在该回调中将使用该服务并设置相应的布尔实体的值。
我有一个实体 "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 事件添加侦听器回调。在该回调中将使用该服务并设置相应的布尔实体的值。