当我使用 set 作为捕获时,为啥 Twig 不能使用变量作为数组的索引?

Posted

技术标签:

【中文标题】当我使用 set 作为捕获时,为啥 Twig 不能使用变量作为数组的索引?【英文标题】:Why Twig cannot use variable as index for array when I use set as capture?当我使用 set 作为捕获时,为什么 Twig 不能使用变量作为数组的索引? 【发布时间】:2011-09-29 04:40:00 【问题描述】:

在 Twig 中,我可以通过 2 种方式进行设置

% set car = 'Honda' %

% set car %Honda%endset%

第二种方式是“捕获”

当我尝试将变量用作数组中的索引时 例如,

 cars[car].wheels | length 

设置变量的第二种方法不起作用。为什么?

【问题讨论】:

【参考方案1】:

你也可以像这样使用第二种方式(你应该修剪汽车变量):

% set car %Honda%endset%

 cars[car|trim].wheels | length 

【讨论】:

【参考方案2】:

在 Twig 中打开调试模式。 使用调试扩展查看2种场景中的变量。

第一种方式

% set car = 'Honda' %
% debug car % 

会告诉你那辆车仍然是本田的字符串

但是,第二种方式

% set car %Honda%endset%
% debug car %

会告诉你这辆车现在是一个

Twig_Markup 对象([content:protected] => car)

因此,如果您想将变量用作数组中的键或索引,请不要使用捕获作为设置变量的方法。

更新:Twig 版本大于 1.5 使用 dump 代替 debug

例如:

% set car = 'Honda' %
% debug car % 

例如:

% set car %Honda%endset%
% debug car %

【讨论】:

@kissmyface meta.stackexchange.com/questions/17463/… 看起来调试在 Twig 1.5 中已被弃用。文档建议使用 dump 而不是 twig.sensiolabs.org/doc/functions/dump.html

以上是关于当我使用 set 作为捕获时,为啥 Twig 不能使用变量作为数组的索引?的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我在浏览器中设置代理时查尔斯没有捕获流量

为啥当我切换工作区时 Flash Builder Premium 会作为标准版启动?

为啥不能将 const set<Derived*> 作为 const set<Base*> 传递给函数?

为啥我的 LUA 解释器不能处理字符串键值?

为啥 std::unordered_set 不将 CComBSTR 类型作为键?

为啥数组不能作为函数参数传递?