2012-10-23 68 views
1

Possible Duplicate:
Symfony2 validation doesn’t work when Entity Relationships/AssociationsSymfony2的:形式收集的驗證不起作用

我有一個表格PageFormType,那只有一個名爲「項」字段和任何數據類。

public function buildForm(FormBuilderInterface $builder, array $options) { 

    $builder->add('entries', 'collection', array('type' => new EntryFormType()); 
} 

public function setDefaultOptions(OptionsResolverInterface $resolver) { 
    $resolver->setDefaults(array('data_class' => null )); 
} 

形式的設置的偉大工程,我看到每一個條目,並呈現EntryFormTypes的各個領域,但validationg我PageFormType時,它始終是有效的。驗證一個EntryFormType可行,但我喜歡一次性驗證我所有的嵌入式表單。這是否有可能?

回答

3

您必須爲您的表單分配驗證(請參閱:http://symfony.com/doc/current/book/forms.html#adding-validation)。在你的情況下,你可能想要這樣的東西,使用Valid-Constraint

use Symfony\Component\Validator\Constraints\Valid; 

... 

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $collectionConstraint = new Collection(array(
     'entities' => new Valid(), 
    )); 

    $resolver->setDefaults(array(
     'validation_constraint' => $collectionConstraint 
    )); 
} 
+0

謝謝你的答案。我的Entry Entity的約束在Entity類中定義爲註釋。當然,我做錯了什麼,但只是複製你的代碼會導致錯誤:約束有效不能嵌套在constraint.Symfony \ Component \ Validator \ Constraints \ Collection中。您只能直接在字段或方法上聲明有效約束。另外,主要的問題是,我的頁面實體和入口實體之間沒有關係。但是我發現所有例子都假設了這一點 – schingeldi

+0

對,我沒有看到。那麼,如果重複來自表單中實體的約束不是一個選項,我可以提供的唯一的其他「解決方案」就是編寫一個監聽器,它將驗證bind或post_bind上的數據。 – dbrumann

+0

+100這真是太棒了@mahok。非常感謝。我無法在文檔中找到有關收集驗證的文章。在文檔中看到關於收集驗證的部分,我們很高興看到這一點。偉大的提示。 – Mick