Php &引用;“违约”;未将验证组转换为嵌入实体中的组序列
我有以下表格类型:Php &引用;“违约”;未将验证组转换为嵌入实体中的组序列,php,symfony,symfony-forms,symfony-validator,Php,Symfony,Symfony Forms,Symfony Validator,我有以下表格类型: class ProjectStep1Type extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('client', new ClientType(), [ 'label' => 'Client', ]);
class ProjectStep1Type extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('client', new ClientType(), [
'label' => 'Client',
]);
// More fields
// Save as draft button
$builder->add('saveDraft', 'submit', [
'label' => 'Save as draft',
]);
// Actual submit button
$builder->add('validate', 'submit', [
'label' => 'Validate',
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$validationGroups = function(FormInterface $form) {
if ($form->get('saveDraft')->isClicked()) {
return ['Default', 'Draft'];
}
return ['Default', 'Step1'];
};
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\Project',
'validation_groups' => $validationGroups,
]);
}
}
(部分)验证yaml文件如下所示:
AppBundle\Entity\Client:
group_sequence:
- Client
- TypesOK
properties:
label:
- NotNull:
groups: [Step1]
- Type: string
- Length:
max: 255
groups: [TypesOK]
vatCode:
- NotNull:
groups: [Step1]
- Type:
type: string
contact:
- NotNull: ~
- Type: AppBundle\Entity\Contact
- Valid: ~
address:
- Type: AppBundle\Entity\Address
- Valid: ~
sector:
- NotNull:
groups: [Step1]
- Type: AppBundle\Entity\CompanySector
AppBundle\Entity\Project:
group_sequence:
- Project
- TypesOK
properties:
client:
- NotNull:
message: form.project.client.error.not_null
- Type: AppBundle\Entity\Client
- Valid: ~
status:
- NotNull: ~
- Type: string
- Choice:
choices: [DRAFT_1, DRAFT_2, DRAFT_3, SENT, REJECTED, DELETED]
groups: [TypesOK]
现在,问题是:当我验证表单时,项目
实体被正确验证,按顺序为每个组验证一次,即[Project,TypesOK,Draft]
但是,客户端
实体使用默认
验证组进行验证。如果使用Default
验证成功,则不会调用组Client
和TypesOK
但是,如果验证失败,将调用这些组!当使用Default
进行验证时,将显示此时我不希望出现的错误消息以及引发的错误
我所期望的是,Client
永远不会使用Default
进行验证,而是将Default
组转换为组序列[Client,TypesOK]
,即使它通过了Valid
约束
我错过什么了吗
编辑:
我在这方面取得了一些进展。只有在编辑表单时才会出现验证问题。编辑表单时,将使用继承Client
的代理类,而不是常规的Client
类
教义的正常特征
但是,验证程序元数据工厂不使用父客户端的组序列。它获取其约束,但不获取此属性
这似乎是一个非常接近的问题,但在那里的解决方案不适合我
现在问题对我来说已经很清楚了,然而,我不知道应该如何正确地解决这个问题。我看到的第一件事是,在AppBundle\Entity\Project
的验证组中,客户机被定义为ItalyBundle\Entity\client
,但在客户机的验证组中,正在使用AppBundle\Entity\client
。是的,对不起,这只是一个问题我的部件出现复制/粘贴错误。修正了,这里也有同样的问题。我们有一个OrderLine
类型,希望将其添加到特定工作流中的formBuilder中。如果我们单独使用订单行
类型,验证工作正常,但是如果通过另一个表单使用,验证总是起作用。