我已经google了一下,似乎TWIG的创作者真的坚持我在这里做的事情,这对我来说是VIEW的纯粹工作,模板根本不应该照顾的东西?!
我知道我不能在没有一些自定义TWIg过滤器的情况下迭代stdClass的对象,所以我现在已经攻击了它,但是如果我不能动态地访问属性,那么这个TWIG的东西真的不是很有用。
$fixedModuleNames = array('time', 'date', 'weather'); //since TWIG doesn't iterate over objects by default, this is my solution, don't feel like adding a bunch of twigfilters just for this.
$fixedModules = json_decode($entity->getFixedModules());
/*
Here's what fixedModules look like (although here not JSON but array, before encoded to json, I like to create my JSONs this way in PHP)
$fixedModules["time"] = array(
'show' => true,
'left' => 10,
'top' => 10,
'width' => 100,
'height' => 200,
'fontColor' => '#000000',
'fontSize' => 40,
'fontFamily' => 'Arial',
'borderColor' => '',
'borderRounding'=> 0,
'bgColor' => ''
);
*/
这就是我想要做的......
{% for item in fixedModuleNames %}
<TR>
<TD><input type="number" id="left_{{ item }}" value="{{ fixedModules[item].left }}" class="LayoutModuleEditField" /></TD>
所以此行失败
{{ fixedModules[item].left }}
必须有办法解决这个问题,因为我正在做的事情很常见吗?
答案 0 :(得分:0)
啊,这可能是首选方式吗?
{{ attribute(fixedModules, item).left }}
答案 1 :(得分:0)
如果您的属性功能有效,请使用它。
然而请考虑fixedModules [item] .left。您要求twig确定该项是变量,而left是常量。至少可以说任何系统都难以做到。
我会使用类似的东西:
{% for moduleName, module in fixedModules %} {# Time, Date, Weather module #}
{% for itemName,itemValue in module %} {# Process each attribute in the module #}
...
如果要迭代对象,则只需实现数组迭代器接口。通常很简单。
答案 2 :(得分:0)
item
不是键,而是数组的元素。因此,您可以通过以下方式访问您的属性:
{% for item in fixedModuleNames %}
left = {{ item.left }}
{% enfor %}
如果您真的想要使用密钥,请执行以下操作:
{% for key, item in fixedModuleNames %}
left = {{ fixedModuleNames[key].left }}
{% enfor %}
希望这有帮助。