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

时间:2015-08-18 11:35:25

标签: php symfony sonata-admin

我正在使用Sonata Admin。是否可以在同一列表视图中显示仅针对某些行而不是其他行显示的操作?

例如,假设我有一个带有"活动"的用户实体。领域。我想展示"删除"仅针对非活动用户的操作,而不针对活动用户。我怎么能这样做?

1 个答案:

答案 0 :(得分:7)

是的,您可以在 configureListFields 管理类操作中,在$ listMapper上添加 _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逻辑的地方。