如何在Twig文件中引入外部JSON文件作为变量使用?
如何在Twig文件中引入外部JSON文件作为变量使用?
我完全懂你想把JSON数据和Twig模板分离的需求,这样确实能让代码结构更清爽~你之前尝试的{% include %}方式其实只是把JSON文件的内容当成纯字符串存到变量里了,Twig并没有自动把它解析成可直接访问的数组或对象,所以才没法像之前那样调用属性。
咱们可以通过两步解决这个问题:先读取JSON文件内容,再把字符串解析成Twig能识别的数据结构,具体方法如下:
方法一:结合include和json_decode过滤器
这种方法适合没法直接调用文件读取函数的场景:
{# 先把JSON文件内容读取为字符串 #} {% set header_links_raw %} {% include "header_links.json" %} {% endset %} {# 把字符串解析成关联数组(保持和你原来的调用方式一致) #} {% set header_links = header_links_raw|json_decode(constant('JSON_OBJECT_AS_ARRAY')) %}
方法二:直接读取文件并解析(更简洁)
如果你的Twig环境允许使用file_get_contents函数,可以用更短的写法,注意要填对JSON文件的正确路径:
{% set header_links = file_get_contents('header_links.json')|json_decode(constant('JSON_OBJECT_AS_ARRAY')) %}
验证使用
解析完成后,你就可以像之前一样正常调用数据了:
<ul> {% for link in header_links.study.main_menu.menu_links %} <li><a href="{{ link.url }}">{{ link.title }}</a></li> {% endfor %} </ul>
小提示:如果希望解析后得到对象而不是数组,去掉constant('JSON_OBJECT_AS_ARRAY')参数即可,这时调用方式要改成header_links->study->main_menu->menu_links。
备注:内容来源于stack exchange,提问作者user1085587
相关产品推荐
相关产品推荐

