5

私はSymfony2のマルチテナントアプリケーションを設計しています。各テナントは、デフォルトのアプリケーションテンプレートをオーバーライドするテーマを持つことができます。したがって、テーマには一意base.html.twigのファイルがあり、デフォルトのテンプレートファイルを上書きする他のファイルが含まれる場合と含まれない場合があります。

Symfony2はすでにapp/Resources/viewsバンドルテンプレートをオーバーライドするテンプレートをチェックしています。ただし、Symfony2はapp/Resources/views、デフォルトのテンプレートをオーバーライドできるテンプレートのセットが1つしかないことを前提としています。テナントのカスタムテーマフォルダで、さまざまなオーバーライドテンプレートを動的にチェックしたいと思います。例:

  1. テーマ:
    • app/Resources/views/theme1/base.html.twig
  2. テーマ:
    • app/Resources/views/theme2/base.html.twig
    • app/Resources/views/theme2/SomeBundle/Resources/views/page.html.twig

これをSymfony2で構造化し、Twigで構成するための最良の方法がわかりません。さまざまなテーマをすべてapp/Resources / viewsのフォルダーに積み上げる必要がありますか?または、すべてを処理するある種のThemeBundleを作成する必要がありますか?ありがとう!

4

3 に答える 3

2

私は同じ問題を抱えていたので、LiipThemeBundleを使用して解決しました。設定に数分かかりました:

  • composer でバンドルをインストールし、有効化します。
  • バンドルを構成します (app/config/config.yml)


    liip_theme:
        themes: ['theme1', 'theme2', 'theme3']
        active_theme: 'theme1'

  • 3 行を app/config/routing.yml にコピーします。


    liip_theme:
        resource: "@LiipThemeBundle/Resources/config/routing.xml"
        prefix: /theme

  • ファイルを Resources\views\ から Resources\themes\theme1\ に移動します

そして準備完了!!

その後、コントローラーでテンプレートをレンダリングすると:



    return $this->render('AcmeDemoBundle:Demo:index.html.twig');

「Resources\themes\ theme1 \Demo\index.html.twig」にあるファイルを使用します。私の場合、モデルの一部のエンティティにカスタムテーマがあるため、別のテーマに切り替える必要がある場合、1 行のコードでそれを行うことができます。

 

    $this->get('liip_theme.active_theme')->setName('theme2');
    return $this->render('AcmeDemoBundle:Demo:index.html.twig');

「Resources\themes\ theme2 \Demo\index.html.twig」にあるファイルを使用するようになりました

それは簡単です!! (そしてきれいに)

于 2014-08-22T11:46:31.107 に答える
1

バンドルについて学ぶ:Symfony2バンドル構造、ユースケース-バンドルはテーマをサポートします。

テーマの解決とカスケードについて学ぶ:LiipThemeBundle-読むためのコードが付属しており、探しているものがすべて揃っているはずです。

于 2011-07-24T13:13:08.477 に答える