2011-11-13 2 views
1

管理バンドルを作成して、何とか他のバンドルを検出し、それらをメニューと同じRBACコンテキストに追加しようとします。Symfony 2バンドルを使用して柔軟な管理パネルを設計するにはどうすればよいですか?

例:

  • AdminBundleは、認証と承認を必要とする、ルート/管理/ダッシュボードを定義します。ここでは、ダッシュボード、config(データベースに保存されている設定)、ユーザー(UserBundleにあるユーザーのためのCRUD)など、メニューに3つの項目が表示されます。
  • 次に、誰かがProductBundleを追加します。電子商取引製品などが含まれます。どうにかして、AdminBundleのコードを変更せずに、新しいアイテム 'products'を/ admin /ダッシュボードのメニューで利用できるようにしました。
  • その後CRUDは不要になったので、ProductBundleを削除します。管理ダッシュボードのメニューから自動的に消えます。

どうすればこのような実装を行いますか? symfony 2でこのようなプラグインのようなデザインをネイティブにサポートしていますか?

答えて

5

私は完全なプラグイン・ソリューションについては知らないが、私のアプローチは次のようになります。

1「マスターバックエンドは、」会話のためにMasterAdminBundleそれを呼び出すがあります。このバンドルには、Administrationエリアのナビゲーションバーと{% block content %}の定義に役立つbase.html.twigが含まれています。それはまた、メニューを表示する何らかの種類のMenuServiceを持っています。私は他のバンドルをAdminMenuサブタイトルのTag SystemのようにVoterのようにSecurity Contexthere参照)と同様に登録することができます。

私はおそらくEmbedded Controllerを使用してメニューをレンダリングします。

は今場所でのフレームワークのこの種を使用して他のバンドルは、独自の管理者のルートおよびインタフェースを保つことによってカプセル化されたままにすることができます

ProductControllerは今もあなたはクラス定義でルートプレフィックス@Route("/admin")を使用することができますProductAdminControllerを持っているでしょう。テンプレートはコントローラ名の下に保持されるため、どのルートもバンドル内からテンプレートをレンダリングできます。 Acme\ProductBundle\Resources\views\ProductAdmin\edit_products.html.twigであり、base.html.twigMasterAdminBundleから拡張し、その内容をcontentブロックに入れている限りです。

他のバンドルを接続したいと思うダッシュボードの場合は、同じ方法をそのまま使用して、MasterAdminBundleでサービスを作成し、タグを使用して他のクラスを必要なデータで読み込みます。

他の人がこれにはもっと良い解決策を持っていると思うかもしれませんが、私は現時点で取り組もうとしていることも聞いてみたいと思います。

+0

興味深い。私はタグシステムを使用していない、私はそれについて読んでいます。ありがとう – HappyDeveloper

関連する問題