树枝 - 遍历表单域
我面临一个问题,试图遍历树枝表单主题中的所有表单元素。其实我用这个来遍历他们:树枝 - 遍历表单域
{% for child in form.parent.children %}
我没有发现它在文档,我只是把表单变量,发现道路上的字段。这实际上适用于所有表单,除非表单本身有一个名为的子项。我不知道这是否是一个错误,因为如果你只是转储form
对象的结构是在两种情况下是相同的:
但是,如果您尝试访问form.parent.children
当它有一个children
参数里面你赢了“T获得该数组的"children"
,而直接结果:
正如你在这种情况下看到form.parent.children
直接指形式的儿童元素(同已识别r#1592)。如果您尝试获得form.parent.children.parent.children
,您将再次获得children
元素,因此如果表单包含名为children
的参数,则基本上使用此方法不可能遍历表单字段。
这是一个错误还是我错过了什么?也许还有另一种方法来实现我想要的?
回答:
是的,这是与the way Twig accesses each attribute for convenience相关的名称冲突,因为FormView
被宣布为\ArrayAccess
it has priority over object's properties。顺便说一下,parent
和vars
属性也会发生同样的情况,但现在让我们专注于解决方案,而不是解决问题。
由于这是一个树枝的问题,解决方案应针对这个方向。一种解决方法可能是create a custom function是获得FormView
的正确属性:
public function getFunctions() {
return array(
new TwigFunction('formview_prop', array($this, 'getFormViewProperty')),
);
}
public function getFormViewProperty(FormView $formView, string $prop)
{
// parent, children or vars
return $formView->{$prop};
}
所以,使用此功能时,您可以访问到视图的属性,而不是形式的字段(如果有名称冲突):
{% for child in formview_prop(form, 'parent') %}
然后,它将遍历父视图的所有字段元素(子元素)。但是,我更愿意通过创建三个函数formview_parent
,formview_children
和formview_vars
来代替,并且不要传递第二个参数。
在这个意义上,你可能也需要验证表单是否具有父视图与否,这样以来Symfony 2.7.39, 2.8.32, 3.3.14, 3.4.1, 4.0.1 was introduced(如bug修正)的新枝条的测试功能命名为rootform
是避免这种冲突,尤其是对parent
物业:
{% if form is rootform %}
以上是 树枝 - 遍历表单域 的全部内容, 来源链接: utcz.com/qa/261549.html