5

私は Symphony2 を使用した Web 開発は初めてですが (ただし、Web 開発は初めてではありません)、中規模のプロジェクトを開始しようとしています。これは、アプリのインストールごとに異なるセットアップが行われる可能性があるため、バンドルに分割されます。利用可能な機能の。

利用可能なバンドルからナビゲーションを動的に生成したいと思います。たとえば、バンドル「foo」がアクティブな場合、foo メイン コントローラ アクションへのルートを含むメニュー エントリが表示されます。

通常、これに対する私の考えは、どこかにシングルトンを作成し、バンドルの load() 関数中にそれを埋め、レンダリング中にシングルトンを出力することです。

しかし、symfony2 はこの部分で多くの柔軟性を提供するため、現在、より良い方法がないかどうかを評価しています。

サービスはここに行く方法でしょうか?それともイベント?または、依存性注入を伴うもので、バンドルは構築時に NavigationConfigurationElement のインスタンスを取得しますか?

これに関する意見や考え、またはこれを行う方法の例へのリンクは大歓迎です。

敬具、イェンス

4

1 に答える 1

6

私はそれを行うための最良の方法は、依存性注入タグを使用することです。依存性注入拡張機能を作成し、さまざまなバンドルがメニューエントリを登録するために使用できる「タグ」を提供する必要があります。

インターネットにはそれに関するリソースがたくさんあるので、ここではプロセス全体については説明しません。

しかし、あなたに何をすべきかの簡単な概要を与えるために

  1. メニューエントリを保持するサービスを実装します(あなたが話しているシングルトン)
  2. コンパイラパスを実装してタグを処理します。このコンパイラパスは、ナビゲーションクラスでタグ付けされたすべてのサービスを検索し、それらをメニューサービスに登録します。
  3. サービスを使用してメニューを取得してレンダリングするtwig関数を作成します
  4. タグを使用してメニュー項目を提供するバンドルを作成する

ここにあなたを助けるかもしれないいくつかのリソースがあります:

http://symfony.com/doc/current/components/dependency_injection/tags.html http://miguel.ibero.me/es/post/2012-04-28/adding-tags-to-symfony.html

私は現在、DIタグも使用するsymfony用のsolrバンドルを実装しています。さまざまなバンドルのさまざまなSolrインデックスを管理するIndexManagerというクラスがあります。私はDIタグを使用して、他のバンドルがsolrでインデックス付けするコンテンツ/エンティティを登録できるようにします。原理はメニュー項目と同じです。

ここを参照してください:https ://github.com/roomthirteen/Room13SolrBundle

重要なファイルは次のとおりです。

コンパイラパスの追加:https ://github.com/roomthirteen/Room13SolrBundle/blob/master/Room13SolrBundle.php コンパイラパス自体:https ://github.com/roomthirteen/Room13SolrBundle/blob/master/DependencyInjection/Compiler/SolrCompilerPass .php

それがお役に立てば幸いです。これ以上の質問はありますか?お気軽にお問い合わせください。

于 2012-05-29T17:26:46.357 に答える