Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php &引用;“违约”;未将验证组转换为嵌入实体中的组序列_Php_Symfony_Symfony Forms_Symfony Validator - Fatal编程技术网

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中。如果我们单独使用
订单行
类型,验证工作正常,但是如果通过另一个表单使用,验证总是起作用。