2016-10-20 14 views
3

Symfony2でモジュラー構造の税務セルフサービスアプリケーションを構築しています。Symfony2のモジュール式アプリケーション構造

これらのモジュールは、TaxBillsBundle、DirectDebitBundle、およびPersonalDataBundleなどの別々のバンドルに含まれています。これらのバンドルには、フロントエンド/バックエンド機能、エンティティなどが含まれています。

アイデアは、AppBundleにモジュールを接着させることです。さて、これはSymfony2で初めてのアプリケーションなので、私はこれにどのようにアプローチするのかよく分かりません。

これは、アプリケーションのメイン画面である:

Tax Office application mock-up

各タイルはモジュールを表します。この画面を構成する最善の方法は何ですか? AppBundleは、タイルを表示する責任がありますが、その内容は対象としません。私は新しいモジュールを追加するときにAppBundleに触れたくありません。

イベントシステムの使用を提案する同僚。 AppBundleは、モジュール(加入者)が応答できるタイルコンテンツの要求を「ブロードキャスト」することができました。すべてのタイルのコンテンツが収集されると、AppBundleはそのページを構成することができます。これは合理的なアプローチですか?他のアイデア?

答えて

0

静的タイルの場合、アプリ全体のビューディレクトリにtwigテンプレートを作成してダッシュボードapp/Resources/views/pages/dashboard.html.twigビューファイルに含めます。彼らは内容が似ている場合は、単一小枝モジュールファイルを使用し、それにデータを渡すためにリファクタリングができます彼らはダイナミックであれば、私はこの方法にして、各バンドルにサービスを設定します

// DashboardController.php 
public function dashboardAction() 
{ 
    /** You could use an entity and create new objects for tiles instead of building an array like this. Or a method to return each one. **/ 
    $tiles = []; 
    $tiles[] = [ 
     'name' => 'Personal Data', 
     'links' => [ 
      { 
       'text' => 'Show data', 
       'icon' => 'fa-user', 
       'href' => '#' 
      }, 
      { 
       'text' => 'Edit data', 
       'icon' => 'fa-edit', 
       'href' => '#' 
      } 
     ] 
    ]; 

    return $this->templating->renderResponse(
     'PathTo/dashboard.html.twig', [ 'tiles' => $tiles ]); 
} 

// dashboard.html.twig 
{% for tile in tiles %} 
    {% include 'modules/dashboard-tiles/tile.html.twig' with { 
     'tile': tile 
    } %} 
{% endfor %} 

# tile.html.twig 
<div class="tile"> 
    <h2>{{ name }}</h2> 
    {% for link in links %} 
     <a href="{{ href }}"><i class="fa {{ icon }}"></i> {{ text }} 
    {% endfor %} 
</div> 

あなたのコントローラから呼び出すことができ、twigに送られたビューに必要なデータを返します。

$tiles[] = $this->personalDataService->getDashboardTile(); 

しかし、それは単純で保管しない理由のタイルがちょうどそうボタンが含まれているように見えます:あなたはおそらく、あなたのコントローラにサービスを取得し、そのように使用する依存性の注入を使用したいと思います。

関連する問題