如何在Sonata管理中显示/隐藏某些行的操作


How to show/hide an action for some rows in Sonata Admin

我使用的是Sonata Admin。是否有可能在同一个列表视图中只显示某些行,而不显示其他行?

例如,假设我有一个带有"active"字段的User实体。我想显示"删除"操作仅为非活动用户,而不是为活跃用户。我该怎么做呢?

可以,在configureListFields admin类操作中,当在$listMapper上添加_action列时,您应该添加delete action的模板选项,然后您可以在该模板中实现一些逻辑:

$listMapper
    ...
    ->add('_action', 'actions', array(
        'actions' => array(
            'delete' => array(
                'template' => 'YourAdminBundle:List:list_delete_action.html.twig',
            ),
        ),
    ));

然后在list_delete_action.html.twig:

{% if admin.isGranted('DELETE', object) and admin.hasRoute('delete') and not object.isActive %}
<a href="{{ admin.generateObjectUrl('delete', object) }}" class="btn btn-sm btn-default delete_link" title="{{ 'action_delete'|trans({}, 'SonataAdminBundle') }}">
    <i class="glyphicon glyphicon-remove"></i>
    {{ 'action_delete'|trans({}, 'SonataAdminBundle') }}
</a>
{% endif %}

在此模板中,您将定义object,它是每个列表行的实体,因此您可以使用它的getter从您的实体中获取某些内容。注意if语句and not object.isActive中的条件,因此这里是应用额外if逻辑的地方。