2012-05-21 80 views
4

我有一個大的表單組織在一些驗證組。對於表單中的每個組都有一個相應的複選框,告訴服務器保存組數據。我如何驗證基於Symfony2中的表單中的某些字段只有一些驗證組

當用戶發佈表單時,我只需要驗證與選中的複選框相對應的驗證組,因爲它們的某些「子」字段是必需的,但僅限於激活組。否則驗證器必須忽略必需的字段。

其實我在控制器中這樣做。我跳過Symfony的正常驗證週期並手動驗證每個字段檢查組激活複選框。

如何將此驗證邏輯移入Form類或實體使用的特定約束類中?


編輯:

正如下面說的是在symfony的2.1不可能性,現在我解決了:

$request = $this->get('request'); 

// myEntity knows the business logic to chose validation groups 
$myEntity->collectValidationGroups($request); 

$form = $this->createForm(new MyEntityType(), $myEntity); 

回答

2

如果您正在使用的Symfony 2.1,那麼你可以根據提交的數據集驗證組。檢查this部分。

+0

不能升級到2.1,但它正是我需要的 – yuri

+0

如果你不能,你仍然可以依靠的要求,收集綁定數據到表格。在您的formType中注入請求並使用它構建validation_groups選項。 – Florian

0

還有另外一種可能性,不是2.1提供的。 可以使用$builder->getData()設置窗體上的validation_groups屬性:

// inside buildForm method of a form type: 
$builder->setAttribute('validation_groups', $builder->getData()->getValidationGroups()); 
+0

對不起,但不是在將表單綁定到數據之前調用的buildform函數?最後我創建表單然後綁定()實體,然後我調用isValid()。內部構建表單我還沒有可以啓用我的驗證組的複選框。這樣對嗎?確實是 – yuri

+0

。然後我忍不住:s – Florian

+0

np,只是爲了檢查我是否錯過了某些東西;) – yuri

相關問題