web-dev-qa-db-ja.com

ソナタ管理者:ダッシュボードからのみ「新規追加」ボタンを削除するにはどうすればよいですか?

Sonata AdminBundleでSymfony2.7を使用して、いくつかの製品と製品イメージを管理しています。 Sonata Admin Cookbookレシピを使用しました: https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_file_uploads.html 画像用。

画像には製品IDが関連付けられている必要があるため、Sonata管理ダッシュボードと上部のツールバーから[新規追加]画像リンクを無効にして、アップロードされた画像に製品が関連付けられるようにします。実際、画像の追加を許可する必要があるのは、製品の追加/編集ページのみです。

ここにあるいくつかの回答によると、私はこのようなルートを削除しようとしました: Sonata管理ダッシュボード:エンティティごとにアクションを構成する

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

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

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

したがって、ルートが存在し、リンクを削除する必要があります。これは構成を使用して行うことができますか、それともテンプレートを書き直す必要がありますか?

13
VMC

管理者クラス:

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

13
Kaizoku Gambare

Adminクラスでこれを試してください:

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

以下に、Sonatadmin関数を非表示にするオプションのリストを示します。

protected function configureRoutes(RouteCollection $collection)
{
    $collection->remove('create');
    $collection->remove('edit');
    $collection->remove('delete');
    $collection->remove('show');
    $collection->remove('export');
}
4
Shadi Akil

管理者を定義するsonata管理者構成で、「group」タグを削除します。こんな感じです。

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
amacrobert