2016-07-27 6 views
1

をリンクする前に、カスタム・ロジックを追加するには、次へSonataAdmin - 私たちは私たちのエンティティの管理クラスで、OUビューリストでのおかげで私たちが望むアクションリンクをカスタマイズすることができます知っているどのように特定のアクションを表示する

$listMapper 
    ->addIdentifier('name') 
    ->add('minRole') 
    ->add('_action', null, [ 
     'actions' => [ 
      'show' => [], 
      'edit' => [], 
      'delete' => [] 
     ] 
    ]) 
; 

をやロールを管理感謝サービスは:sonata.admin.security.handler.role

私の場合は(それがビューリスト編集ビューに表示されます)[削除]ボタンを表示するかしないために、ドメインロジックを追加したいと思います。

{% if attribute(object, hasEvents) is defined and not object.hasEvents %} 
    # display it 
{% endif %} 

私はSonataの小枝テンプレートをオーバーライドする方法を知りません。 2つのエンティティ:EventPostのみが対象です。 ビューリストため

EDIT

私が直接list__action_delete.html.twigテンプレートをオーバーライドする(私はapp/Resources/SonataAdminBundle/views/CRUD/list__action_delete.html.twigを作成した)、これはコード(私はそれが最善の方法ではありません知っている...)です:

{# 

The template override the basic one in order to prevent the display of the delete button (in the view list) for the entities 
Post and Event. We only display it if they don't have associated activities. 

#} 
{% if admin.isGranted('DELETE', object) and admin.hasRoute('delete') %} 
    {% if not attribute(object, 'isDeleteable') is defined %} 
     <a href="{{ admin.generateObjectUrl('delete', object) }}" class="btn btn-sm btn-default delete_link" title="{{ 'action_delete'|trans({}, 'SonataAdminBundle') }}"> 
      <i class="fa fa-times"></i> 
      {{ 'action_delete'|trans({}, 'SonataAdminBundle') }} 
     </a> 
    {% else %} 
     {% if object.isDeleteable %} 
      <a href="{{ admin.generateObjectUrl('delete', object) }}" class="btn btn-sm btn-default delete_link" title="{{ 'action_delete'|trans({}, 'SonataAdminBundle') }}"> 
       <i class="fa fa-times"></i> 
       {{ 'action_delete'|trans({}, 'SonataAdminBundle') }} 
      </a> 
     {% endif %} 
    {% endif %} 
{% endif %} 

答えて

1

例として、編集テンプレートを使用したソリューションを紹介します。オーバーライドする他のパーツ/ブロック/テンプレートを検索する場合も同じ方法に従ってください。

編集テンプレートのブロックブロックをオーバーライド/オーバーライドすることは、です。異なるアプローチがあるテンプレートを上書きするには

vendor/sonata-project/admin-bundle/Resources/views/CRUD/base_edit_form.html.twig 

:ブロックはソナタ管理バンドルのbase_edit_form.html.twigテンプレートで定義されています。 symfony doc about how to override any part of a bundleに記載されている方法を使用するか、config options to override the path for some of the sonata templates as described in the docsを使用することができます。

後者の使用をお勧めします。 AppBundleがあり、それを使用してテンプレートを上書きしたいとします。

sonata_admin: 
    templates: 
     edit: AppBundle:CRUD:edit.html.twig 

はファイルsrc/AppBundle/Resources/views/CRUD/edit.html.twigを作成し、それに vendor/sonata-project/admin-bundle/Resources/views/CRUD/base_edit_form.html.twigテンプレートからformactionsブロックをコピーします。app/config/config.ymlファイル内のソナタconfigセクションに次の行を追加します。ソナタバンドルに同梱されてbase_edit.html.twigテンプレート(最初の行)を拡張することを忘れないでください:

{% extends 'SonataAdminBundle:CRUD:base_list.html.twig' %} 

{% block formactions %} 
    ... 
{% endblock formactions %} 

formactionsブロックで削除ボタンを探すの文がどんな操作を行う場合は、カスタムを追加あなたはしたいと思った。

+0

あなたの明確な答えをいただきありがとうございます。編集ページでは完全に動作しますが、代わりに 'sonata_form_actions'ブロックを使用しました:) –

関連する問題