2015-08-18 1 views
2

Я использую Sonata Admin. Возможно ли иметь действие, которое отображается только для некоторых строк, но не для других строк, все в одном списке?Как показать/скрыть действие для некоторых строк в Sonata Admin

Например, предположим, что у меня есть Пользовательский объект с «активным» полем. Я хотел бы показать действие «удалить» только для неактивных пользователей, а не для активных пользователей. Как я могу это сделать?

ответ

7

Да, вы можете в вашем configureListFields действия класса администратора, при добавлении _action колонки на $ listMapper, вы должны добавить параметр шаблона для удалить действия, а затем вы можете реализовать определенную логику в этом шаблоне:

$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, которое является сущностью для каждой строки списка, поэтому вы можете использовать его получатели, чтобы получить что-то от вас. Обратите внимание, что условие в выражении if and not object.isActive, поэтому здесь вы применяете свою дополнительную логику.

+0

Большое спасибо! :) – Chemaclass