打印表单嵌套错误 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
我正在使用 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