Forms Symfony表单集合-我们是否可以逐行检查验证,而不是检查整个表单?
我试图验证一些数量值,以确保我不会保存它们,除非我们有库存分配给它 问题是我使用的是表单集合,这意味着如果我们要交付100个项目,并且用户在分派表单上创建了两行,每行数量为100个,那么验证将允许创建两个项目,而不是我想要的,即允许保存第一行,但在第二行出错 似乎在调用Forms Symfony表单集合-我们是否可以逐行检查验证,而不是检查整个表单?,forms,symfony,doctrine,Forms,Symfony,Doctrine,我试图验证一些数量值,以确保我不会保存它们,除非我们有库存分配给它 问题是我使用的是表单集合,这意味着如果我们要交付100个项目,并且用户在分派表单上创建了两行,每行数量为100个,那么验证将允许创建两个项目,而不是我想要的,即允许保存第一行,但在第二行出错 似乎在调用表单->isValid()时会触发验证,但似乎应该可以在调用表单->isValid()之前逐行处理,我似乎无法理解 如果我无法逐行验证是否有其他方法可以顺利处理此类问题?要知道,我在这里看到两个选项:第一个是使用特殊常量来验证表单
表单->isValid()
时会触发验证,但似乎应该可以在调用表单->isValid()
之前逐行处理,我似乎无法理解
如果我无法逐行验证是否有其他方法可以顺利处理此类问题?要知道,我在这里看到两个选项:第一个是使用特殊常量来验证表单值,下面是一个示例:
class MyEntityType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
....
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setDefaults([
'data_class' => 'AcmeDemoBundle:MyEntity',
'constraints' => [
new Callback(
['callback' => [$this, 'validateForm']]
)
]
]);
}
public function validateForm(MyEntity $data, ExecutionContextInterface $context)
{
// Some validation logic here
// e.g.:
if ($data->getSomeData() < 4) {
$context
->buildViolation('ERROR MESSAGE HERE.')
->atPath('someData')
->addViolation()
;
}
}
...
}
类MyEntityType扩展了AbstractType
{
公共函数buildForm(FormBuilderInterface$builder、array$options)
{
....
}
公共函数配置选项(选项解析器$resolver)
{
$resolver
->设置默认值([
“数据类”=>“AcmeDemoBundle:MyEntity”,
'约束'=>[
新回调(
['callback'=>[$this'validateForm']]
)
]
]);
}
公共函数validateForm(MyEntity$data,ExecutionContextInterface$context)
{
//这里有一些验证逻辑
//例如:
如果($data->getSomeData()<4){
$context
->buildViolation('此处有错误消息')
->atPath('someData')
->addViolation()
;
}
}
...
}
第二个是按此处所述创建。这里我不提供示例,因为它可能需要太多的编码。。但是,您应该注意,如果要使用自定义约束验证集合项,则必须在父窗体的默认选项中将
cascade\u validation
选项设置为true
。是否尝试使用$form->get($fieldname)->isValid()?我没有想到马里诺,但我刚刚尝试过这个,在我的情况下似乎不起作用。谢谢你的主意。谢谢这个xurshid,我以前没见过这个方法。我花了一些时间来实现它,它似乎并没有改变我的设置,所以我必须假设这个问题是在教义本身。