私は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 = [];
私はFilterCollectionのものに私の要求から要素を変換することができるように、私は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);
}
}
。しかし、私がフィルタ定義で持っているバリデーションはうまくいかず、たとえバリデーションが失敗しても、それでもパスします。私はバリデータがFilter要素を渡していないと思います。
何が起こっているのでしょうか?
あなたのコードに何が問題なのかよく分かりませんが、おそらくhttps://symfony.com/doc/current/reference/constraints/Collection.htmlをご覧ください。 –
私は試しましたそれを地元で働かせることはできません。 FilterFormのフィールドに手動で制約を追加することができます。例: $ builder-> add( 'age'、TextType :: class、[ 'constraints' => array新しいRegex(['pattern' => '/ [0-9] + /'])))、 ]); –