【问题标题】:Validation error when submit form in Symfony在 Symfony 中提交表单时出现验证错误
【发布时间】:2021-05-02 09:15:24
【问题描述】:

我为注册用户创建了一个表单:

$builder
->add('username', TelType::class)
->add('passwordField', PasswordType::class, [
    'mapped' => false,
    'constraints' => [
        new NotBlank([
            'message' => 'Error'
        ]),
        new Length([
            'min' => 6,
            'minMessage' => 'Error'
        ])
    ]
])
->add('firstname')
->add('lastname')
->add('agreeTerms', CheckboxType::class, [
    'mapped' => false,
    'constraints' => [
        new IsTrue([
            'message' => 'PLEASE CHECK AGREE TERMS'
        ])
    ]
])
->add('submit', SubmitType::class);

现在我想通过管理面板添加用户。我在我的管理面板中创建了一个“添加用户”页面。

我不想在管理面板的“添加用户”页面中添加“agreeTerms”复选框。

但是当我提交表单时,验证错误并显示“PLEASE CHECK AGREE TERMS”。

daabas 中的 AgreeTerms 不能为空。

我在我的树枝模板中使用它来表示不显示同意条款复选框:

{{ form_start(addUsersForm) }}
        <div>
            {{ form_widget(addUsersForm.username, {
                'required': true
            })}}
            {{ form_label(addUsersForm.username) }}
        </div>
        <div>
            {{ form_widget(addUsersForm.pass, {
                'required': true
            })}}
            {{ form_label(addUsersForm.pass) }}
        </div>
        <div>
            {{ form_widget(addUsersForm.name)}}
            {{ form_label(addUsersForm.name) }}
        </div>
        <div>
            {{ form_widget(addUsersForm.lastname)}}
            {{ form_label(addUsersForm.lastname) }}
        </div>
{{ form_end(addUsersForm, {'render_rest': false}) }}

我该如何解决这个问题?

【问题讨论】:

  • 所以你的前端有一个带有复选框的表单,必须选中它,但是在你的管理页面上必须跳过这个字段?
  • @IhorVyspiansky 嗨,是的,用户必须选择复选框,但在管理面板中我们不需要显示和选择复选框,并且在管理注册页面控制器中我为数据库设置了同意条款,因为它在数据库中不为空
  • 您可以将每个约束组织成 1 个或多个“验证组”,然后针对 1 组约束应用验证。例如,将在您的前端和管理页面上检查的字段可能会标记为'groups' =&gt; ['Default', 'registration']'groups' =&gt; ['admin', 'registration']。并且必须在前端检查的字段仅作为'groups' =&gt; ['registration']。更多细节在这里stackoverflow.com/a/13200272/2224394symfony.com/doc/current/validation/groups.html

标签: php forms symfony twig


【解决方案1】:

首先将其添加到您的表单创建中,例如:

$form = $this->createForm(UserType::class,null,[
    'validation_groups' => ['adminRegistration']
]);

在 UserType.php 的末尾添加这个:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => User::class,
        'validation_groups' => ['registration']
    ]);
}

然后将协议条款更改为:

->add('agreeTerms', CheckboxType::class, [
    'mapped' => false,
    'constraints' => [
        new IsTrue([
            'groups' => 'registration',
            'message' => 'PLEASE CHECK AGREE TERMS'
        ])
    ]
])

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多