How to Choose Validation Groups Based on the Clicked Button

When your form contains multiple submit buttons, you can change the validation group depending on which button is used to submit the form. For example, consider a form in a wizard that lets you advance to the next step or go back to the previous step. Also assume that when returning to the previous step, the data of the form should be saved, but not validated.

フォームに複数の送信ボタンが含まれている場合、フォームの送信に使用されるボタンに応じて、validationgroup を変更できます。たとえば、次のステップに進んだり、前のステップに戻ったりできるウィザードのフォームを考えてみましょう。また、前のステップに戻るときに、フォームのデータを保存する必要があるが、検証は行わないとします。

First, we need to add the two buttons to the form:

まず、フォームに 2 つのボタンを追加する必要があります。
1
2
3
4
5
$form = $this->createFormBuilder($task)
    // ...
    ->add('nextStep', SubmitType::class)
    ->add('previousStep', SubmitType::class)
    ->getForm();

Then, we configure the button for returning to the previous step to run specific validation groups. In this example, we want it to suppress validation, so we set its validation_groups option to false:

次に、前のステップに戻って特定の検証グループを実行するためのボタンを構成します。この例では、検証を抑制したいので、validation_groups オプションを false に設定します。
1
2
3
4
5
6
$form = $this->createFormBuilder($task)
    // ...
    ->add('previousStep', SubmitType::class, [
        'validation_groups' => false,
    ])
    ->getForm();

Now the form will skip your validation constraints. It will still validate basic integrity constraints, such as checking whether an uploaded file was too large or whether you tried to submit text in a number field.

これで、フォームは検証制約をスキップします。アップロードされたファイルが大きすぎるかどうか、または数値フィールドにテキストを送信しようとしたかどうかのチェックなど、基本的な整合性制約は引き続き検証されます。

See also

こちらもご覧ください

To see how to use a service to resolve validation_groups dynamically read the How to Dynamically Configure Form Validation Groups article.

サービスを使用して validation_groups を動的に解決する方法については、フォーム検証グループを動的に構成する方法の記事を参照してください。