【问题标题】:Symfony2 - How to implement partial / full templates for loading AJAX content in twig?Symfony2 - 如何实现部分/完整模板以在树枝中加载 AJAX 内容?
【发布时间】:2013-11-26 14:56:01
【问题描述】:

在我的 Symfony2/twig webapp 中,我有一个 twig 模板,它只包含 <div id="#container">...</div>,没有 <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,其中包括所有&lt;html&gt;&lt;/html&gt; 包装。应该是这样的:

# 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 %}

但是我的方法都不起作用。你有什么想法吗?

【问题讨论】:

    标签: ajax symfony twig template-inheritance


    【解决方案1】:

    Richard Miller 写了一篇不错的文章,展示了一种为 AJAX 使用实现部分模板的好方法。

    文章名为“Symfony2: Ajax and Full Page Templates”。

    后来,他发表了第二篇更详细的文章,其中还涵盖了my suggestions,名为“More on AJAX templates”。

    这两篇文章(尤其是第二篇)提供了您在此处尝试执行的操作的详细实施示例。


    基本上,诀窍是确定要从变量扩展的模板,因为你不能包装......

    {% extends '..' %} 
    

    ...周围有{% if %}-statement。


    工作示例

    {% 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 %}
    

    请注意,涉及树枝扩展的解决方案(如上述文章中所述)是可重复使用的,通常是更好的做法。

    【讨论】:

    • 两者都不需要扩展,它们可以相互线性扩展......要么部分模板包含在主模板中......要么部分模板具有主模板的空包装块填充。有我吗?
    • 并非如此。你能举一个简单的例子吗?三个树枝文件(1.base_template,2.template,3.ajax_partial;其中ajax_template没有base_template包装)?
    • 我的意思是:你的工作示例在哪里,进入 base_layout,进入模板或进入 ajax_template?
    • 应将示例代码放入模板中,该模板应根据传入请求是否为 ajax 请求来扩展完整或部分基本模板。
    • 啊好吧,我明白了。我需要对我的代码进行一些修改才能像这样设计它,但这会对我有所帮助。非常感谢!
    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多