2013-01-15 116 views
2

建議根據您的類製作表單類的文檔可以重複使用。它還向您展示瞭如何獨立於您的表單類呈現不同的字段,而不是使用{{ form_widget() }}呈現所有這些字段。Symfony呈現隱藏表單域

由於我正在構建一個簡單的註冊頁面,我只想顯示User Form類中的一些字段,因此我將它們渲染爲這樣{{ form_widget(form.email) }}

但是,因爲im獨立渲染字段隱藏表單字段'CFTOKEN'不呈現這是symfony框架所要求的。因此,GE的錯誤:The CSRF token is invalid. Please try to resubmit the form.

在doucmnetation沒有提到這或如何呈現獨立的隱藏表單域...

回答

2
+0

就像邁克說。或者按照http://symfony.com/doc/2.0/book/forms.html#csrf-protection – qooplmao

+0

中的說明禁用csrf是的,禁用CSRF是一種備用解決方案,但應預先警告不建議在任何情況下禁用CSRF可能會傳遞敏感數據的表單。 – Mike

+0

好吧,你不能使用{{form_rest(表單)}}就像你說它呈現其餘的字段,我將每個表單字段唯一地呈現出來,因爲它們是我想要顯示的唯一字段... –

4

這真的是唯一的方式..

{{ form_widget(form._token) }} 

漂亮stuiped如何Symfony的文檔向您展示如何獨立渲染每個表單字段,然後說您必須使用{{ form_rest(form) }}來生成剩餘的必需字段,如CFtoken,因爲它還會渲染表單類中的所有表單字段,以避免獨立執行它們只是使用{{form_widget()}}

哎呀

+1

Ben,閱讀form_rest上的描述 - 「這是一個好主意,會爲您渲染隱藏的字段,並讓您忘記渲染的任何字段更加明顯(因爲它會爲您渲染字段)。「 ---在Symfony文檔中沒有任何地方會說「渲染每個你想要顯示的表單域,並忽略你在表單類型中定義的其他域」。 – Mike

+0

那麼支持個別表單域的銷燬會有什麼意義呢...... –

+0

要自定義表單的顯示。它看起來的樣子。 – Mike

6
<div style="display: none;">{{ form_rest(form) }}</div> 

會得到你的開始。一旦你起牀S2,那麼你會發現有很多選擇。

例如,將一個參數傳遞給UserFormType的構造函數可以很容易地控制創建哪些字段。