2

独自のルートを持つ複数のスキン/テンプレートを含む symfony プロジェクトがあります。正しいセットアップのアイデアはありますか?

  • スキンとアセットだけでなく、一部のスキンに存在する可能性のあるサービスも含まれているため、すべてのスキン/テンプレートは独自のバンドルです。
  • ホスト名がスキンを決定します。
  • カスタム RouteLoader を使用して、ターゲット バンドルの route.yml をロードします。

カスタム RouteLoader は仕事をしますが、生成されたルートはキャッシュされています。私の知る限り、ルートのキャッシュを防ぐ方法はありません。

いくつかの提案は次のとおりです。

  • /{dynamic} ルートを作成するため、手動でルートを形成します..しかし、ルーターのその機能を捨てたり、プロジェクト全体をリファクタリングしたりしたくありません..
  • ルートの前にテンプレート識別子を付けます。これには、すべての route.yml ファイルをロードする必要がありますが、パスが共有されているため、これは不可能です。

誰?複数のプロジェクトを行うことはできません。スキンの量は 20 ~ 30 ~ 程度です。

このセットアップの理由は、Content-as-a-Service .. サービスのターゲットであり、複数のクライアントがプロジェクトをプラットフォームとして使用し、それらの設定によって使用されるテンプレートが決定されるためです。

4

3 に答える 3

1

ホスト名に基づいてバンドルを動的にロードしたいようですね。キャッシュのため、Symfony 2 では起こりません。特にサービス。

あなたの最善の策は、スキンごとにアプリをセットアップしてから、url majic を実行して目的の app.php ファイルを実行することです。明らかに、スキンごとにバンドルを定義しているため、数には限りがあるため、複数のアプリを使用することはあまり負担にならないようにする必要があります。

テンプレートの問題を回避できる可能性があります。すべてのスキン バンドルをロードする必要がありますが、テンプレート名またはパスをいじって、おそらく何かを機能させることができます。

しかし、サービス?ホスト名をサービス ID に追加しない限り、回避策はありません。

于 2015-11-06T15:46:36.473 に答える
0

Symfony2 はすでに、次のようにすぐに使用できるホスト認識ルーティングをサポートしています。

website_customer_1:
    path:     /
    host:     customer1.example.com
    defaults: { _controller: Customer1Bundle:Main:startPage, theme: template1 }

website_customer_2:
    path:     /
    host:     customer2.example.com
    defaults: { _controller: Customer1Bundle:Main:startPage, theme: template2 }
于 2015-11-06T15:41:24.667 に答える