具有自定义约束的Symfony表单验证顺序

时间:2017-10-16 15:16:11

标签: forms symfony validation symfony-3.3

具有自定义约束的Symfony表单验证顺序

嗨大家好,

我有一个相当复杂的信用申请表格,我将其分成几个(表格)步骤。 “商务模型”实体如下(缩短):

Application
  - amount: int
  - duration: int
  - creditUserAmount: int
  - creditUsers array of CreditUser objects
  ...

CreditUser
  - firstName: string
  - lastName: string
  - questions: Questions object

Questions
  - <question1>: string
  - <question2>: string
  ...

所以,我有(嵌入)表单的层次结构。

验证每个实体由validation.yml配置。我创建了一个自定义约束来实现条件验证(以满足要求)。例如。根据选择类型“creditUserAmount”,应用程序自定义约束仅验证第一个或多个creditUsers。

要仅验证表单的某些部分(如上所述“步骤”),我将验证组添加到每个约束中。这项工作到目前为止。但是我希望只有在传递了这个实体的所有其他约束并将其标记为有效时才调用自定义Application约束(它是类约束)。我怎样才能做到这一点?

validation.yml

AppBundle\Form\Application:
    constraints:
        - AppBundle\Validator\Constraints\Application:
            groups: [Default, questions]
    properties:
        amount:
            - NotBlank:
                message: Bitte eine Kreditsumme angeben.
        duration:
            - NotBlank:
                message: Bitte eine Laufzeit angeben.
        creditUsersAmount:
            - NotBlank:
                groups: [questions]
                message: Bitte wählen Sie eine Anzahl Kreditnehmer aus.
            - Choice:
                groups: [questions]
                choices: [1, 2]
                message: Bitte wählen Sie eine gültige Anzahl Kreditnehmer aus.

AppBundle\Form\CreditUser:
    constraints:
        - AppBundle\Validator\Constraints\CreditUser:
            groups: [Default, questions]
    properties:
        questions:
            - Valid: ~
        firstName:
            - NotBlank:
                message: Bitte geben Sie einen Vornamen an.
        lastName:
            - NotBlank:
                message: Bitte geben Sie einen Nachnamen an.

AppBundle\Form\Questions:
    constraints:
        - AppBundle\Validator\Constraints\Questions:
            groups: [Default, questions]
    properties:
        returnDebitNotes:
            - NotBlank:
                groups: [questions]
            - Choice:
                groups: [questions]
                choices: [Y, N]
                message: Bitte wählen Sie eine Antwort aus.
        ...

控制器: ...

$application = new Application();
$form = $this->createForm(ApplicationType::class, $application, [
        'validation_groups' => ['questions'], // Only apply constraints of group "questions"
    ]
);

谢谢, 延

0 个答案:

没有答案