簡體   English   中英

是否可以在 Symfony 2 中創建自定義表單字段屬性?

[英]Is it possible to create custom form field attributes in Symfony 2?

在 Symfony2 表單組件中是否可以創建自定義屬性?

我問的原因是因為我正在處理 read_only 不夠的某個極端情況。

這是場景:我需要根據一些外部邏輯解析的結果來綁定數據。 這很重要,因為我可能有默認禁用的字段,但根據外部邏輯,這些字段可能會被激活。 我不能使用客戶端腳本來產生這個結果,它必須在表單屬性中被禁用。

如果我以只讀字段開頭,它將被禁用,但我永遠無法將數據綁定到它。 因此,鑒於上述外部邏輯的結果,我將無法使用 read_only。 所以這讓我別無選擇,只能使用不同的屬性來禁用該字段。

是否可以創建自定義屬性來產生這種禁用效果?

我不確定我是否正確理解了您的問題; 你想為你的表單輸入標簽添加任意屬性嗎? 例如:

<input type="text" name="myInput" myAttr="myValue" />

如果這是您想要做的,那么這是可能的,如下所示:

$form = $this->createFormBuilder($someObj)
        ->add('myInput', 'text', array(
             'attr' => array('myAttr' => 'myValue')
        )
        ->getForm();

文檔在這里:

http://symfony.com/doc/2.0/reference/forms/types/field.html

很難確切地說出您要做什么,但聽起來您希望根據某些事件動態生成 forms,如下所述:

http://symfony.com/doc/2.0/cookbook/form/dynamic_form_generation.html

您的限制不是 Symfony,您的限制是 HTML 和 HTTP。 不幸的是,一旦 HTTP 請求得到滿足,一旦數據被發送到瀏覽器,服務器就無法改變渲染的內容(嗯,幾乎沒有,總是有天網)。 唯一的選擇是 JavaScript(如果他們不運行 Lynx,這可以做很多事情)。

我在 Google Groups 上看到了您的問題,根據兩者的結合,我可以告訴您,您只有兩個選擇。

  • 您可以使該選項顯示為對您從瀏覽器獲得的第一個響應的響應。
  • 您可以使用 JavaScript 然后處理服務器端的任何故障。

你最好的選擇? 我認為用戶會喜歡 JavaScript 選項。 無論如何,在服務器端驗證用戶信息是一個很好的策略。 顯然,通過 JavaScript 驗證盡快讓用戶知道,但無論如何您都需要檢查他們在服務器上的輸入。

順便說一句,要禁用 Symfony 中的表單域,這里有分步說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM