打印表单嵌套错误 Symfony 5

Print form nested errors Symfony 5

我正在使用 symfony 表单将 reCaptcha 集成到我的网站。我已经创建了一个自定义表单类型,其中包含一个 HiddenType 输入。

class ReCaptchaType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('token', HiddenType::class, [
            'constraints' => [
                new NotBlank([
                    'message' => 'Please, verify the captcha.',
                ]),
                new ReCaptchaConstraint([
                    'action' => $options['action'],
                    'projectDir' => $this->projectDir
                ])
            ],
        ]);
    }
}

我使用 javascript 获取令牌,然后将其设置为 HiddenType 输入,以便我可以获取令牌值并对其进行验证。因此,如您所见,我使用了两个约束,NoBlank 和一个自定义的 ReCaptchaConstraint。

HiddenType 输入默认为空值。因此,如果验证码未经过验证,则该值将保持空白,并且约束会触发失效。此行为按预期工作,并且未发送表单。在 symfony 调试工具栏中,我收到了相应的消息。

但我想将此消息作为表单错误显示给用户,我有以下模板

{% block re_captcha_errors %}
    {% for child in form.children %}
        {{ form_errors(child) }}
    {% endfor %}
{% endblock %}

有了这个,它应该打印 children 的错误,目前是 HiddenType。并将它们打印为 ReCaptchaType 错误。但它不打印任何东西。实际上,如果我在模板中硬编码某些内容,它会被打印出来,但 children 错误不会。

我不知道我这样做是否正确。这应该有效吗?如何在我的模板中显示错误消息?

这是我的表单模板,在哪里使用 ReCaptchaType

...
<tr>
    <td class="f-err" colspan="2">
        {{ form_errors(registrationForm.recaptcha) }}
    </td>
</tr>
<tr>
    <td class="f-wig" colspan="2">
        {{ form_widget(registrationForm.recaptcha) }}
    </td>
</tr>
....

请参阅 HiddenType 的文档。看起来隐藏的子元素上的错误会冒泡到父元素,因为好吧,子元素是隐藏的。

error_bubbling default: true

Pass errors to the root form, otherwise they will not be visible.

-- https://symfony.com/doc/current/reference/forms/types/hidden.html#error-bubbling

所以在{{ form_errors(form) }}中查找错误或将error_bubbling设置为false