2015-08-18 66 views
2

我正在使用Sonata Admin。是否有可能只顯示一些行的行爲,而不是其他行,所有行都在同一個列表視圖中顯示?如何在Sonata中顯示/隱藏某些行的操作管理

例如,假設我有一個具有「活動」字段的用戶實體。我只想爲非活動用戶顯示「刪除」操作,而不是針對活動用戶。我怎樣才能做到這一點?

回答

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 %} 

在這裏,在這個TEMPL吃了你會有object定義,這是每個列表行的實體,所以你可以使用它的getters從你的實體獲取一些東西。注意if語句and not object.isActive中的條件,所以這就是你應用你的附加if邏輯的地方。

+0

非常感謝! :) – Chemaclass

相關問題