2
我正在使用Sonata Admin。是否有可能只顯示一些行的行爲,而不是其他行,所有行都在同一個列表視圖中顯示?如何在Sonata中顯示/隱藏某些行的操作管理
例如,假設我有一個具有「活動」字段的用戶實體。我只想爲非活動用戶顯示「刪除」操作,而不是針對活動用戶。我怎樣才能做到這一點?
我正在使用Sonata Admin。是否有可能只顯示一些行的行爲,而不是其他行,所有行都在同一個列表視圖中顯示?如何在Sonata中顯示/隱藏某些行的操作管理
例如,假設我有一個具有「活動」字段的用戶實體。我只想爲非活動用戶顯示「刪除」操作,而不是針對活動用戶。我怎樣才能做到這一點?
是的,你可以在你的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 %}
在這裏,在這個TEMPL吃了你會有object
定義,這是每個列表行的實體,所以你可以使用它的getters從你的實體獲取一些東西。注意if語句and not object.isActive
中的條件,所以這就是你應用你的附加if邏輯的地方。
非常感謝! :) – Chemaclass