2016-05-19 75 views
0

將驗證約束條件納入項目時,哪些最佳實踐是什麼?Symfony2中的驗證:實體與FormType - 最佳實踐?

在大多數情況下,您將它保留在Entities或FormTypes中?

有什麼優點和缺點?

這裏是我的意思是:

FormType例如

$builder 
    ->add('firstName', TextType::class, array(
     'constraints' => array(
      new NotBlank(), 
     ), 
    )) 
; 

實體例如

class Author 
{ 
    /** 
    * @Assert\NotBlank() 
    */ 
    protected $firstName; 
} 

回答

4

我的回答是:

有時您的約束將適用於您的實體在整個應用程序範圍內。但是有時候限制只適用於你的表單上下文。在後一種情況下,您可以直接在您的表單中使用約束,或者您可以使用validation_groups。

我傾向於使用實體約束最多,因爲我覺得它更乾淨,並且不會在我的應用程序中引入不一致。

+2

最佳解決方案仍然是不使用實體作爲數據對象。編寫數據傳輸對象以避免大量頭痛問題,並使表單變得更容易。在這種情況下,我可以說你的答案確實是正確的。 –

+0

任何代碼段?我很好奇你是如何妥善管理的。 – Terenoth

+1

它只是一個帶有getter/setter(POPO)的數據對象,就像我的ChangeUsernameType有一個ChangeUsernameData一樣,它只是保存舊的和新的用戶名,我的類型在new上有一個重複的類型,並且與現有的用戶名匹配。一旦提交併且有效,我只需執行$ user-> setUsername($ myDto-> getUsername());並沖洗我的用戶。這可以防止我的實體進入無效狀態,甚至更糟糕,在這種狀態下被意外沖刷。這也意味着我可以塑造我的形式,而不會受到我的模型的阻礙。 –