テーマを使用する機能を実装する必要があります。https://github.com/liip/LiipThemeBundleを試してみましたが、うまくいきました。しかし、私はマルチサイト機能を使用しているため (つまり、ドメイン名に応じて site_id が定義されています)、パスは次のようになります。
- app/sites/{site_id}/Resources/themes/phone/BundleName/template.html.twig
- app/sites/{site_id}/Resources/BundleName/views/template.html.twig
- src/BundleName/Resources/themes/phone/template.html.twig
- src/BundleName/Resources/views/template.html.twig
そして、私がリクエストした場合、::template.html.twig
パスは次のようになります:
- app/sites/{site_id}/Resources/themes/phone/template.html.twig
- app/sites/{site_id}/Resources/views/template.html.twig
質問は次のとおりです。
site_id は実行時のみ取得できます
$container->get('engine.site')->getId()
。Liip\ThemeBundle\Locator\FileLocator のコンストラクターの内部に入り、$this->path
そこを微調整して、ビューのさまざまなサイトのパスを取得できるようにしましたapp/Resources/sites/{site_id}/
(ただし、取得するには非常に優れていますapp/sites/{site_id}/Resources/
)。ただし、この方法ではもちろん、最初のリクエストでキャッシュがまだ形成されていないときにエラーが発生します («Whoops, looks like something went wrong. InactiveScopeException: You cannot create a service ("request") of an inactive scope ("request").»
)。そして、他のすべての要求は正常に機能します。しかし、これは実際には解決策ではありません。これから問題は、テンプレートのパスを動的に構築できる場所はどこですか?LiipThemeBundle のすべてのテーマは config で設定できます。しかし、このリストを動的に作成するにはどうすればよいですか (取得できるすべてのテーマ
$container->get('engine.site')->getThemes())
?