2016-03-03 19 views
0

我想創建只讀隱藏字段。現在我有場,看起來像這樣:如何避免從symfony表單寫回數據?

$builder 
     ->add('question_category_id', HiddenType::class); 

和實體有方法:

public function getQuestionCategoryId() { 
    return $this->getQuestion()->getQuestionCategory()->getId(); 
} 

節省我之後得到了以下錯誤:

Neither the property "question_category_id" nor one of the methods "addQuestionCategoryId()"/"removeQuestionCategoryId()", "setQuestionCategoryId()", "questionCategoryId()", "__set()" or "__call()" exist and have public access in class "Entity\UnitQuestionAnswer".

我可以添加虛擬方法

public function setQuestionCategoryId($id) { 
    return $this; 
} 

但它是不正確的方式。

如何創建只讀隱藏字段,或避免從實體寫回數據?

+0

你想用只讀的隱藏字段做什麼? –

+0

@JaredFarrish,按模板中的類別排列問題。 – sectus

+1

[驗證symfony2形式與額外的字段]可能的副本(http://stackoverflow.com/questions/10868859/validating-symfony2-forms-with-extra-fields) –

回答

0

S2.8有一個read_only屬性,它可以做你想做的事,但它已經在3.0中被刪除了。

禁用的屬性應該工作。請注意,值本身實際上不會被提交symfony.com/doc/current/reference/forms/types/...所以如果你對發佈的數據做任何事情都很奇怪,那麼這可能是一個問題。

我想這可能與內部相混淆,但這會比它的價值更麻煩。

個人而言,考慮到我的get方法只是爲表單添加的,我只需添加一個相應的set方法並繼續。

+0

@RyanVincent,是的,客戶端可以更改禁用的字段值,但禁用的值不會發送回服務器。並且此值將僅用於使用自定義模板可視化表單。 – sectus

+0

@sectus - 請注意,用戶可以取消禁用它,併發布該值,從而觸發未找到的設置消息。如果客戶實際上不需要該值,則不要發送該值。你的樹枝模板可以將它從數據對象中拉出來。 – Cerad