2014-06-23 36 views
1

我建立了陣列數據的形式嵌入實體類型是這樣的:驗證Symfony的2形式陣列和實體

​​

Book實體包含驗證約束,但他們永遠不會被調用。什麼是缺失/錯誤?

+1

對'Book'實體約束使用驗證組嗎? – pazulx

+0

就是這樣,@pazulx!我在那裏有一個驗證組。你能寫一個簡短的答案,所以我可以選擇那個答案作爲正確答案嗎? – chiborg

回答

1

Valid約束不支持validation groups。只有沒有組的限制纔會被使用。

例如:

Acme\BlogBundle\Entity\User: 
    properties: 
     email: 
      - Email: { groups: [registration] } 
     password: 
      - NotBlank: { groups: [registration] } 
      - Length: { min: 7, groups: [registration] } 
     city: 
      - Length: 
       min: 2 

如果您在使用UserType約束Valid那麼只有cityLength將被驗證。

0

正如你可以在這裏閱讀的,如果你已經添加了對Book實體的驗證,表單將自動使用這些對指定類的驗證。

爲此,您應該將對象Book傳遞給表單或使用BookType中的data_class選項來設置Book實體。

要使用data_class選項,你會做到以下幾點:

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'YourName\YourBundle\Entity\Book', 
    )); 
} 

但是你可以用約束鍵指定不同的驗證。

當您指定此有效類約束時,您將覆蓋Book實體中定義的約束。

來源:http://symfony.com/doc/current/book/forms.html#form-option-constraints

+0

謝謝!雖然這並沒有解決我在這種情況下的問題(我的默認選項中已經有了正確的'data_class',我的錯誤是由表單初始化中錯誤的驗證組引起的),通常這是一種很好的方法。 – chiborg