2016-05-17 65 views
2

buildForm()我想提取当前表单字段节点的完整ID /名称。 $builder->getName()返回当前节点的只有名字,但我需要完整的属性路径,例如:Symfony如何为表单字段生成id /名称?

id="type_employments_0_location" 
name="type[employments][0][location]" 

有什么办法来产生这一点的同时建设形式?

我正在制定一个自定义的必填字段类型扩展,它在构建表单时查找每个字段的“强制性”因此我需要buildForm()中的完整属性路径,以便我可以修改选项数组。

回答

0

简而言之:由所述表单框架生成的完整属性路径不可用于buildForm()但可供buildView()finishView()。如果您需要访问完整的属性路径,请使用这些路径。

1

FormConfigInterface您应该可以使用$builder->getPropertyPath()

它将返回一个PropertyPathInterface对象,只是将其用作字符串以获取字符串的实际属性路径(即print $builder->getPropertyPath()将给出type[employments][0][location])。

+0

这是否在'buildForm()'中工作?在'buildForm()'中调用'$ builder-> getPropertyPath()'似乎只是返回null。在'buildView()'中调用'$ form-> getPropertyPath()'可以工作,尽管在创建表单时已经太晚了,无法实现我想要做的事情。 – nurikabe

+0

我从FormType的'buildForm'方法内部尝试过它,它在我身边运行良好。 – chalasr

+0

嗯..你用什么版本的Symfony?我在2.8。 – nurikabe

0

其实,这很容易。 对于每个字段类型都分配了许多变量。

<label for="{{ form.fieldname.vars.id }}">...</label> 

从symfony的DOC(Form Variables Reference):

变量是共同的每字段类型。某些字段类型可能有更多变量,并且此处的某些变量仅适用于 某些类型。

假设你在你的模板有一个表单变量,你想 参考的名称字段变量,访问这些变量是 通过使用公共做FormView控件对象瓦尔财产。

Form Variables Reference

+0

我在创建视图之前在'builldForm()'中需要这个,这样我就可以将值添加到选项数组中。我会在问题中澄清。 – nurikabe