簡體   English   中英

插入Twig變量/在另一個Twig屬性定義的內部值中進行插值

[英]Interpolate Twig variable/attribute inside value of another Twig attribute definition

采取以下示例結構:

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

問題:

無法識別插值變量,您將得到類似...libs/jquery/%7B%7B%paths.js/jquery.version7D%7D/jquery.min.js...

我試過了:

  • 'a': 'text{{b}}text'
  • 'a': {{ ('text' ~ b ~ 'text') }}
  • 'a': "{{ ('text' ~ b ~ 'text') }}"
  • 'a': "{{ (['text', b, 'text'] | join }}"
  • 'a': "{{ (['text', {{b}}, 'text'] | join }}"
  • 還有更多我忘記的事情

我知道attribute()

沒有太多的文檔,但是從我的角度來看,它一定是這樣的:

attribute(paths, attribute(js, attribute(jquery, cdn)))

只適合一個級別,但不適合任意深度。 如果我誤解了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屬性定義時,尚未設置paths 解決這個問題的一種可能方法是先聲明另一個變量。

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

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

顯然,如果paths.js.jquery.cdn只會使用一次,然后就硬編碼在你需要它和插值孩子變量變量的值:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM