【问题标题】:JSON escape child block content for ajax requestsajax 请求的 JSON 转义子块内容
【发布时间】:2015-12-31 21:20:50
【问题描述】:

每个页面都可以通过两种方式提供 - “html”和“json”方式。
“html 方式”包含一个完整的 html 页面 - 页眉/页脚/菜单/主要内容 - 就像每个页面一样。
“json方式”只包含页面特定的东西,比如内容和标题。

为了实现这一点,我从base.html.twig 扩展的每个模板中都包含以下几行:

{% extends app.request.isXmlHttpRequest()
    ? "base/ajax.json.twig" 
    : "base/full.html.twig" %} 

full.html.twig 只是一个将内容包装在页眉/页脚/菜单中的文件。
ajax.json.twig 包含以下内容:

{
    "title": "{% block title %}{% endblock %}",
    "content": "{% block body %}{% endblock %}"
}

所有这些东西的想法是轻松创建灵活的页面,这些页面可以作为 html 页面和 json 响应,具体取决于 app.request.isXmlHttpRequest()

问题是在 base/ajax.json.twig 中我必须转义 body 块中的内容,以便文件是有效的 json 对象,例如<a href="/"> 使 json 无效,因为引号没有转义:

{ "content": "<a href="/">" }

我需要{{ parent()|json_encode() }} 之类的东西,不是parent(),而是child(),很遗憾我在文档中找不到。
有什么建议吗?

【问题讨论】:

    标签: php json ajax symfony twig


    【解决方案1】:

    您可以从布局中调用块作为函数。在您的情况下,布局将如下所示:

    {% set tmp = {title:block('title'), content:block('body')} %}
    {{ tmp|json_encode }}
    

    【讨论】:

    • 如果你想替换...|replace({'"':'\\"'}),你也应该替换`\`,可能是新行..
    • 不不,我的错,我没有正确理解你的答案...实际上我必须使用{{ tmp|json_encode|raw }},因为twig会自动转义html字符...现在测试...
    • 它工作得非常好(至少在小页面上),谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    相关资源
    最近更新 更多