Object 在另一个细枝属性定义的值内插入细枝变量/属性

Object 在另一个细枝属性定义的值内插入细枝变量/属性,object,twig,interpolation,templating,templating-engine,Object,Twig,Interpolation,Templating,Templating Engine,以以下结构为例: {% set paths = { ... 'js': { ... 'jquery': { 'version': '1.7.2', 'cdn': '

以以下结构为例:

{% set paths = {
                   ...
                   'js': {
                           ...
                           'jquery': {
                                      'version': '1.7.2',
                                      'cdn': 'https://ajax.googleapis.com/ajax/libs/jquery/{{paths.js.jquery.version}}/jquery.min.js',
                                      'fallback': ....
                                      }
                          }
               }
%}
要访问,我通常会使用以下内容:

 <script src="{{paths.js.jquery.cdn}}"></script>
只需要一个层次就可以了,但不是任意的深度层次。如果我误解了
attribute()

'a':('text'~b~'text'
)实际上是正确的,请纠正我,但是表达式周围不能有大括号(因为我们已经在表达式、变量定义中)

正确的方法是:

{% set paths = {
                   ...
                   'js': {
                           ...
                           'jquery': {
                                      'version': '1.7.2',
                                      'cdn': ('https://ajax.googleapis.com/ajax/libs/jquery/' ~ paths.js.jquery.version ~ '/jquery.min.js'),
                                      'fallback': ....
                                      }
                          }
               }
%}

但这里有一个简单的设计错误;当呈现器/解析器进入
cdn
属性定义时,
路径
尚未设置。解决这个问题的一个可能方法是首先声明另一个变量

{% set params=  {
                   'jqueryversion': '1.7.2'
                }
%}

{% set paths = {
                   ...
                   'js': {
                           ...
                           'jquery': {
                                      'cdn': ('https://ajax.googleapis.com/ajax/libs/jquery/' ~ params.jqueryversion ~ '/jquery.min.js'),
                                      'fallback': ....
                                      }
                          }
               }
%}
显然,如果
path.js.jquery.cdn
只使用一次,则只需在需要的地方硬编码父变量的值,并插入子变量:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/{{params.jqueryversion}}/jquery.min.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/{{params.jqueryversion}}/jquery.min.js"></script>