2015-09-28 2 views
6

Symfony 2.7とSonata Admin Bundleを使用して、一部の製品や製品イメージを管理しています。私はSonata Admin Cookbookレシピ:https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_file_uploads.htmlを画像に使用しました。Sonata Admin:ダッシュボードからのみ[新規追加]ボタンを削除するにはどうすればよいですか?

イメージには関連付けられたプロダクトIDが必要です。ソナタ管理ダッシュボードおよび上部ツールバーから「Add New」イメージリンクを無効にして、アップロードされたイメージに関連付けられた製品が表示されるようにします。実際に画像を追加できる場所は、製品追加/編集ページのみです。

私はここで見つけるいくつかの回答によると、このようなルートを削除しようとしました:Sonata Admin Dashboard: configure actions per entity

protected function configureRoutes(RouteCollection $collection) 
{ 
    $container = $this->getConfigurationPool()->getContainer(); 

    if ($container->get('request')->get('_route') == 'sonata_admin_dashboard') { 
     $collection->remove('create'); 
    } 
} 

しかし、私は管理者のダッシュボードにアクセスすると、キャッシュが初期化されている場合は、ので、このソリューションは、良いではありませんルートはどこからでも削除されますが、キャッシュが別のページで初期化されていると、リンクを表示するときにルートが存在する場合、Sonata Adminがテンプレートで検証するため、ダッシュボードを含むすべてのページにルートが存在します。

したがって、リンクが存在し、リンクを削除する必要があります。これは設定を使用して行うことができますか、またはテンプレートを書き直さなければなりませんか?

答えて

0

あなたの管理者を定義するソナタ管理設定では、「グループ」タグを削除します。このような感じです。

services: 
    sonata.admin.images: 
     class: AppBundle\Admin\ImageAdmin 
     tags: 
      - { name: sonata.admin, manager_type: orm, group: "Content", label: "Manage images" } 
     arguments: 
      ... 

group: "Content"を削除するか、あなたのグループのように設定しているものは何でも)

これは「デフォルト」と呼ばれる別のブロックにあなたのイメージの管理者を配置します。

続いて、明示的に「デフォルト」を除外し、ダッシュボードに表示されたブロックを定義します。あなたの管理者クラスで

sonata_admin: 
    dashboard: 
     groups: 
      Content: ~ 
      AnotherGroup: ~ 
+0

ご質問いただきありがとうございます。実際、これはダッシュボードから「新規追加」リンクを削除する方法ですが、「リスト」リンクも削除され、リストにアクセスできるようにしたいと考えています。さらに、上部ツールバーのリンクは削除されません。 –

7

を:

use Sonata\AdminBundle\Route\RouteCollection; 

protected function configureRoutes(RouteCollection $collection) 
    { 
     $collection->remove('create'); 
    } 

あなたはまた、ショーなどを削除する削除することができます。 ..

チェック:https://sonata-project.org/bundles/admin/master/doc/reference/routing.html#removing-a-single-route

+0

これは、 'add' /' create'ボタンを一切削除します。 –

+0

私はあなたのコメントを理解していません –

3

はこの私を試してみてくださいn管理者クラス:

public function getDashboardActions() { 
    $actions = parent::getDashboardActions(); 
    unset($actions['create']); 
    return $actions; 
} 
+0

これは正解とマークする必要があります。 – user1970395