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は、リンクの表示時にルートが存在するかどうかをテンプレートで検証するためです。
したがって、ルートが存在し、リンクを削除する必要があります。これは構成を使用して行うことができますか、それともテンプレートを書き直す必要がありますか?
管理者クラス:
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
Adminクラスでこれを試してください:
public function getDashboardActions() {
$actions = parent::getDashboardActions();
unset($actions['create']);
return $actions;
}
以下に、Sonatadmin関数を非表示にするオプションのリストを示します。
protected function configureRoutes(RouteCollection $collection)
{
$collection->remove('create');
$collection->remove('edit');
$collection->remove('delete');
$collection->remove('show');
$collection->remove('export');
}
管理者を定義する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: ~