1

私の Symfony2/twig webapp には、ラッピング<div id="#container">...</div>なしののみを含む twig テンプレートがあります。<html></html>これをページ レイアウトに埋め込む ajax 呼び出しに使用します。このレイアウトを と呼びましょうajax_template.html.twig

<h1>Headline</h1>
{% block my_content %}
    <p>My content</p>
{% endblock %}

今、私は別のテンプレートを持っていajax_template.html.twigます. ただし、このページは ajax 経由ではなく、直接呼び出されます。base_layout.html.twigしたがって、すべての<html></html>ラッピングが含まれるmy も拡張されます。次のようになります。

# won't work because no multiple inheritance supported
{% extends 'MyBundle::base_layout.html.twig' %}
{% extends 'MyBundle:MyController:ajax_template.html.twig' %}

{% block my_content %}
    <p>My modified content</p>
{% endblock %}

include()たとえば、またはuse()私の小枝テンプレートで、すでにいくつかの方法を試しました。現在のパスが ajax 呼び出しであるかどうかも確認しました。

{% if '/ajax/' in path(app.request.attributes.get('_route')) %}
    {% extends 'MyBundle::base_layout.html.twig' %}
{% endif %}

しかし、私のアプローチはどれもうまくいきません。あなたはなにか考えはありますか?

4

1 に答える 1

4

Richard Millerは、AJAX 用の部分テンプレートを実装する良い方法を示す素晴らしい記事を書きました。

この記事は「Symfony2: Ajax とフル ページ テンプレート」と呼ばれています。

その後、彼は 2 番目の (より詳細な) 記事を公開し、 「 AJAX テンプレートの詳細」と呼ばれる私の提案を追加で取り上げました。

これら 2 つの記事 (特に 2 番目の記事) では、ここでやろうとしていることの詳細な実装例を提供しています。


基本的には、ラップできないため、変数から拡張するテンプレートを決定するのがコツです...

{% extends '..' %} 

... ステートメントを囲み{% if %}ます。


実施例

{% set template = 'MyBundle::base_layout.html.twig' %}

{% if '/ajax/' in path(app.request.attributes.get('_route')) %}
    {% set template = 'MyBundle:MyController:ajax_template.html.twig' %}
{% endif %}

{% extends template %}

(上記の記事で説明されているように) twig 拡張を含むソリューションは再利用可能であり、一般的にはより良い方法であることに注意してください。

于 2013-11-26T18:17:12.747 に答える