2016-05-17 84 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