2012-03-27 5 views
3

私はSymfony2アプリを持っていて、ベースレイアウトファイルbase.html.twigを使用していません。あなたのアプリにこのレイアウトを使用させるには何が必要ですか?自動的に使うだけのようです。symfony2のデフォルトレイアウトとしてbase.html.twigをDRYで使用する

編集:私は、私は任意のレイアウトファイルの先頭に{% extends "::base.html.twig" %}を入れ、その後、私のコンテンツを中心に{% block body %}{% endblock %}を置けば、それはbase.html.twigを使用することを発見しました。しかし、私はこれまで、ファイル単位でこれを行う方法を考え出しただけです。これを行う必要がある場合は、それを使用するすべての単一のテンプレートにインクルードする必要がある場合、それは驚くほど愚かであり、DRYの原則がSymfonyのどの場所でもどれくらいうまく適用されているかを考えればわかりません。

私の質問の具体的なバージョンは次のとおりです。symfonyには、どのようにしてDRH方式でbase.html.twigをグローバルに使うことができますか?

+4

すべてのテンプレートにbase.html.twigが使用されていれば、別のテンプレートを含むことはできません。サブリクエストを別のテンプレートにレンダリングします。基本テンプレートを拡張する必要がないテンプレートを使用していたらどうしますか? – gilden

+0

SF2初心者のための明快さのために - これはSF2のそれ以降のバージョン(2014年4月現在)の場合でもそうですか?すべてのトップレベルテンプレートに ''が必要だと考えて、 'base.html.twig'を拡張する必要がありますか? – crmpicco

答えて

-3

私は私の質問に答えを見つけたようですが、間違いなく願っています。 this section of the docsによれば、すべてのテンプレートページにそのテンプレートextendsを含める必要があります。私はちょうど私のコンピュータの上に全身を突っ込んだ。

編集:明らかに、私の質問に対する答えは明らかに、それは不可能であるということです。

+0

文書を慎重に読んだことがありますか? base.html.twigがある場合は、layout.html.twigでこれを拡張し、使用する特定のテンプレートでこれを拡張します。 – Sgoettschkes

+0

はい、私はその部分を読んでいます。それでも私は個々のテンプレートごとに 'extend'を追加してもらえませんか? –

+0

はい、私はそのショートカットがないと思います。 – Sgoettschkes

5

まず、Twigテンプレートがどのようにコンパイルされるのかを理解する必要があります。それで、想像しておいていただきたいのは、コードにextendsを書き込まずに、すべての普通のPHPクラスをいくつかの基本クラスに拡張する方法を尋ねるようなものです。それは良いアイデアのように聞こえるか?

+0

私はあなたが意味するものを得ます。 symfonyがこれを処理する方法は、自動的に 'extends 'をすべてのテンプレートに含めることです。SymfonyとDoctrineは自動的に生成するPHPクラスファイルに' extend'を自動的に組み込みます。 –

+1

しかし、すべてのファイルでベース/レイアウトテンプレートを拡張したくないのであればどうしますか? –

+3

次に、拡張するコードを拡張するようにコードを変更します。むしろ 'extended'を手作業で貼り付けなければならないよりも、賢明なデフォルトを数回変更する必要があります。 –

1

これを達成する方法があります。それはお勧めではありませんが、可能です。

twig: 
    base_template_class: Path\To\Base\TemplateClass 

問題が発生する可能性があります。 Symfony2には基本テンプレートを使用しないテンプレートもありますので、システムテンプレートのこの機能をオーバーライドする方法を検討する必要があります。

the docsと、またthisです。彼らは両方ともこの機能の使用について話します。

0

これは解答ではなく、回避策です。良いヒントは、エディタでマクロを保存し、twigファイルのために自動的にロードすることです。それから、あなたがそれを適用する必要があるとき、あなたは多くのキーストロークを保存します。これはコードのDRYではありませんが、それはあなたの指のためです。symfonyのコアを変更するのではなく、そのようにするのが好きです。

以下はVIMのマクロです。 、.vimrcでこれを入れてVimを再ロードし、通常モードでごtwigファイルの実行@t中:

autocmd BufNewFile,BufRead *html.twig let @t="ggO{% extends '::base.html.twig' %}\033o{% block body %}\033Go{% endblock %}\033gg" 
1

はい、私はgithubのにthis問題を提起していたが、これはfabpotが

言っていたものですレイアウトはテンプレートの一部であり、そこに属します。我々はshouldnので http://twig.sensiolabs.org/doc/recipes.html#making-a-layout-conditional

、bottomlineは、我々はそれを行うことができない場合、または:あなたは、変数とそれをあなたがやりたいことができ こと、あなたが する場合は、条件付きテンプレートを拡張し、ここで見ている必要がありそれをやっているのであれば、間違っています...

関連する問題