Forms 约束\回调注释验证上一个(未提交)实体
我正在使用验证一个实体Forms 约束\回调注释验证上一个(未提交)实体,forms,validation,symfony,Forms,Validation,Symfony,我正在使用验证一个实体 /** * @ORM\Entity(repositoryClass="AppBundle\Repository\Foo") * @ORM\Table(name="foo") * @Constraints\Callback(methods={"validate"}) */ class Foo { ... function validate(ExecutionContextInterface $context) { if ($
/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\Foo")
* @ORM\Table(name="foo")
* @Constraints\Callback(methods={"validate"})
*/
class Foo
{
...
function validate(ExecutionContextInterface $context)
{
if ($this->foos) {
$context->buildViolation('Foos cannot be emty')
->atPath('foos')
->addViolation();
}
}
表单正在使用此实体:
class FooFormType extends AbstractType
{
private $foosService;
function __construct(FoosService $foosService) {
$this->foosService = $foosService;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('foos', EntityType::class, array(
'label' => false,
'class' => 'AppBundle:Entity\Foo',
'choices' => $this->foosService->getSomeFoos($builder->getData()),
'expanded' => true,
'multiple' => true,
'required' => true,
))
->getForm();
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Foo',
));
}
}
此表格在工厂内称为:
public function getFooForm(Foo $foo)
{
return $this->formFactory->create(new FooFormType($this->foosService), $foo);
}
最后,在控制器中:
...
$form = $this->get('my_factory')->getFooForm($foo);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
...
}
...
这似乎工作正常,但验证是在前一个实体上进行的。我的意思是,如果我提交空的foos
,我可以看到验证错误,但是如果我使用了一些foos
,然后删除这些foos
,然后再次提交,验证不会引发任何异常,因为它是在上一个实体上进行的,该实体有一些foos
。我已经检查了提交的数据是否正确,并且确实,Foo
实体被保留为空的foos
(只有在前一个实体有foos
时)
是什么导致了这种奇怪的行为