Symfony3.4 表单错误渲染两次

Symfony3.4 Form errors rendered twice

我有一个带有 authormessage 字段和 NotBlank() 验证的表单两个都。

在树枝中,我这样做:

{{ form_start(form) }}

    {{ form_errors(form.author) }}
    {{ form_label(form.author) }}
    {{ form_widget(form.author) }}


    {{ form_errors(form.message) }}
    {{ form_label(form.message) }}
    {{ form_widget(form.message) }}

{{ form_end(form) }}

如果我按下 保存 按钮并显示空白字段 我希望 看到这个:

但是我明白了:

底部错误消息不知何故来自 {{ form_label(...) }} 我这样说,因为如果我注释掉标签并使用static HTML 对于标签,输出就像第一张图片。

我不想对标签使用 static HTML,但我不明白第二个错误消息从何而来。

在我的代码下方:

形式

class TestFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('author', TextType::class, ['required' => false, 'constraints' => [new NotBlank()]])
            ->add('message', TextType::class, ['required' => false, 'constraints' => [new NotBlank()]])
            ->add('save', SubmitType::class)
        ;
    }
}

控制器

class TestController extends Controller
{
    /**
     * @Route("/testing", name="test")
     * @param Request $request
     * @return RedirectResponse|Response
     */
    public function index(Request $request)
    {
        $form = $this->createForm(TestFormType::class);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid())
        {
            return $this->redirectToRoute('test');
        }

        return $this->render('test/index.html.twig', [
            'form' => $form->createView(),
        ]);
    }
}

模板 {% 扩展 'base.html.twig' %} {% block title %}Hello TestController!{% endblock %}

{% block body %}

    <p>This is a test...</p>

    {{ form_start(form) }}

        {{ form_errors(form.author) }}
        {{ form_label(form.author) }}
        {{ form_widget(form.author) }}

        {{ form_errors(form.message) }}
        {{ form_label(form.message) }}
        {{ form_widget(form.message) }}

    {{ form_end(form) }}

{% endblock %}

对于bootstrap主题错误块是integrated in label。 因此,您需要删除模板中的 form_errors 块或覆盖 form_label 块。 您可以使用 form_row (正如@Adrien 在评论中建议的那样),因为没有 form_errors call

您已明确添加 form_errors 而错误消息已通过 form_label 呈现。您可以删除 form_errors 或 form_label.