0

(a) バンドル (バンドル 1) は、メインの親 Twig テンプレートを保持します。

(b) 別のバンドル (バンドル 2) は多数のコントローラーを保持し、それらのコントローラーはそれぞれ、そのバンドル (バンドル 2) 内にある Twig テンプレートをレンダリングします。そのテンプレートは、上記のメインの親 (バンドル 1) から拡張されています。メインの親テンプレートへの絶対パスをハードコーディングしても問題ありません。

(c) 親テンプレート (バンドル 1 内) は、別のバンドル (バンドル 2) に格納されている別のテンプレートも埋め込み/インクルードします。

別のバンドル (バンドル 3) を作成した場合に自動的に機能するように、上記のパート (c) の相対パスを設定できますか (親テンプレートには、それを呼び出すバンドルからのテンプレートが含まれます)。絶対パスなのでメインの親をピックアップしますが、上記の(c)の部分をピックアップしますか? 明らかに、親テンプレートが埋め込み/インクルードしているテンプレートに絶対パスを使用することはできません。

4

1 に答える 1

0

私が正しく理解していれば、あるバンドルから別のバンドルへの依存関係を持ちながら、テンプレートを簡単に拡張する方法を尋ねています。

バンドル テンプレートのオーバーライドに関するこのドキュメントを読むことをお勧めします。

これを読むと、[バンドル継承のドキュメント] へのリンクがあることに気付くでしょう。

例として、明示的な名前を持つ 3 つのバンドルがあります。 - GenericSiteBundle - GenericUserBundle - SpecificSiteBundle

他のアプリで使用できるアプリの一般的な構造を作成したいのですが、それらを異なるものにしたいので、レイアウト (ヘッダー、フッター、列など) を変更できる必要があります。

GenericUserBundle:Security:login.html.twigテンプレート構造はextendsのようなものになりますGenericSiteBundle:Layout:simple.html.twig

シンプルなレイアウトを特定のレイアウトに変更したい。あなたがする必要があるのはGenericSiteBundle、の親として宣言してSpecificSiteBundle作成することだけSpecificSiteBundle:Layout:simple.html.twigです。バンドル名のみが異なることを確認してください。そうしないと、子バンドルでテンプレートが見つかりません。

また、このparent()小枝関数も気に入るはずです。親ブロックのコンテンツを取得して子ブロックに追加できます。

それはまさにあなたがやりたいことではありませんが、継承を処理するこの適切な方法です。

于 2013-03-16T21:56:13.583 に答える