我有一个渲染数组的形式在我的D7模块,看起来像这样:
'form' =>
array
'#id' => string 'demo-form' (length=9)
'#action' => string '/sprint07/' (length=10)
'name' =>
array
'#title' => string 'Username' (length=8)
'#maxlength' => int 13
'#size' => int 15
'#type' => string 'textfield' (length=9)
'#required' => boolean true
'#input' => boolean true
'#autocomplete_path' => boolean false
... snip ...
我使用twig-for-drupal
来创建一个主题,但我似乎无法获得值,我尝试过{{ form['name']['#type'] }}
, {{ form.name.#type }}
, {{ form.name['#type'] }}
等,但它们都返回空白。
其他字段,如form['#action']
工作得很好,那么我应该如何访问多个数组中的信息?我不能改变模块太多,因为php模板在其原生状态下使用render(form);
—Update—
对此添加了更多的调试,似乎我可以使用{{ form|dump('v') }}
向我展示整个数组如上所述,但是当我做{{ form.name|dump('v') }}
时,我只是得到一个字符串,我认为这意味着树枝会自动检测它的渲染数组,并"有用地"为我转换它。所以我想这让我的问题:我如何关闭自动渲染?
"name"子数组不包含"#id"键。
try if work
{{ form.name.#title }}
事实证明,目前不可能逐案执行此操作,TFD目前设置为自动渲染它认为是渲染数组的任何内容,并且要关闭此功能,您需要在twig_get_instance()
中将自动渲染设置为FALSE。然而,我自己也试过了,它似乎仍然把数组变成了一个字符串,所以这可能是TFD中的一个bug,或者我只是不理解它的用法,这是同样的,如果不是更多,可能。
From ReneB's sandbox:
Autorender
这个版本的TWIG引擎使用自动渲染来防止用户输入{{节点而得到RSI。Field_somefield |render}}对于他们想要从渲染数组(doom)中渲染的每个字段,所以可以安全地键入{{node.field_something}}
在呈现编译后的模板时,TFD检查被调用的变量是字符串、可调用对象还是数组。如果它是一个字符串,它简单地回显$string,如果它是一个可调用的,它返回一个合适的方法()。如果它是一个数组,它假设它是一个可渲染数组并将其映射到render($string);方法。
这样用hide()隐藏的对象就会被尊重。
现在,您必须在twig_get_instance()方法中将自动渲染设置为FALSE。
我正在处理{% noautorender %} {% end noautorender %}块结构。