如何 show/hide Sonata Admin 中某些行的操作
How to show/hide an action for some rows in Sonata Admin
我正在使用 Sonata Admin。是否可以在同一个列表视图中只显示某些行而不显示其他行的操作?
例如,假设我有一个带有 "active" 字段的用户实体。我只想为非活跃用户显示 "remove" 操作,而不是为活跃用户显示。我该怎么做?
是的,在你的 configureListFields admin class 操作中,当在 $listMapper 上添加 _action 列时,你应该为 delete 操作添加模板选项,然后您可以在该模板中实现一些逻辑:
$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 逻辑的地方。
我正在使用 Sonata Admin。是否可以在同一个列表视图中只显示某些行而不显示其他行的操作?
例如,假设我有一个带有 "active" 字段的用户实体。我只想为非活跃用户显示 "remove" 操作,而不是为活跃用户显示。我该怎么做?
是的,在你的 configureListFields admin class 操作中,当在 $listMapper 上添加 _action 列时,你应该为 delete 操作添加模板选项,然后您可以在该模板中实现一些逻辑:
$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 逻辑的地方。