我有一个实体"文件",我想显示文件系统中现有相关文件的布尔值。为了检查存在,需要使用我的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中做类似的事情?
我会为学说的后载事件添加侦听器回调。在该回调内部将使用服务并设置相应的布尔实体的值。