我有一個Filter和FilterCollection對象。 FilterCollection包含一組過濾器,就像名稱所示。 現在我需要驗證一切,所以我創建了一個FilterType和FilterTypeCollection窗體。在FilterCollectionType我:Symfony3嵌入表單驗證不起作用
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('filters', CollectionType::class, array(
'entry_type' => FilterType::class
));
}
而在FilterCollection定義我有以下幾點:
/**
* @var array
* @Assert\Valid()
*/
private $filters = [];
我創建了一個paramConverter,所以我可以從我的請求轉換成FilterCollection那些轉換元素。在申請的方法,我嘗試驗證一切使用:
public function apply(Request $request, ParamConverter $configuration)
$filterCollection = new FilterCollection();
$form = $this->formFactory->create(
FilterTypeCollection::class,
$filterCollection
);
$form->submit($request->query->all());
if ($form->isSubmitted() && $form->isValid()) {
$request->attributes->set($configuration->getName(), $filterCollection);
return true;
} else {
throw new FormValidationException($form);
}
}
我期待驗證不僅驗證FilterCollection,但也過濾器。但是我的Filter定義中的驗證不起作用,即使我的驗證失敗了,它仍然會通過。我認爲驗證器沒有傳遞Filter元素。
關於可能發生什麼的任何想法?
我不確定你的代碼有什麼問題,但也許你可以看看https://symfony.com/doc/current/reference/constraints/Collection.html - 希望它有幫助 –
我試過讓它在本地工作,不能。 我確實找到了一種解決方法..您可以手動添加約束到FilterForm中的字段,例如: $ builder-> add('age',TextType :: class,['''''''''''') new Regex(['pattern'=>'/ [0-9] + /'])), ]); –