如何从 twig Symfony 5.2 覆盖 form_errors() ?

问题描述 投票:0回答:3

如何在 Symfony 5.2 中覆盖表单字段验证错误模板?

我在树枝中有一个这样的表格

        {{ form_start(registrationForm) }}
            name:<br />
            {{ form_row(registrationForm.name) }}
            family_name:<br />
            {{ form_row(registrationForm.family_name) }}
            Email:<br />
            {{ form_row(registrationForm.email) }}
            password:<br />
            {{ form_row(registrationForm.password) }}
            <br />
            <div class="text-center"><button type="submit" class="site-btn">registration</button></div>
        {{ form_end(registrationForm) }}

如果电子邮件字段验证出错,这是布局

<div>
  <ul>
    <li>There is already an account with this email</li>
  </ul>
  <input type="text" id="registration_form_email" name="registration_form[email]" required="required" maxlength="180" class="register-form-input" autocomplete="off" value="asd">
</div>

问题在于布局存在表单验证错误

  <ul>
    <li>There is already an account with this email</li>
  </ul>

取自标准模板 symfony,但我想在表单字段验证失败时使用自己的模板。

我转向文档进行澄清thisthis,但说实话,这让我更加困惑,我刚刚意识到这个表单可以在模板中以某种方式进行样式化,但我不明白。

如何制作自己的模板来显示表单的字段验证错误?

结果我想要得到这样的布局:

<div>
  <b>There is already an account with this email</b> <br>
  <input type="text" id="registration_form_email" name="registration_form[email]" required="required" maxlength="180" class="register-form-input" autocomplete="off" value="asd">
</div>
symfony twig symfony-forms
3个回答
0
投票

foundation_5_layout.html.twig
延伸了
form_div_layout.html.twig
,我没看到
form_errors
也在
form_div_layout
中,但原理是一样的。

不要复制,例如创建一个模板“errors.html.twig”,使用您想要的代码创建一个块

form_errors
,然后在表单模板中使用

调用它
{% form_theme form 'path/to/errors.html.twig' %}

是不是更清楚了:)?这只是树枝块的覆盖


0
投票

使用 Symfony Forms 时,您可以使用表单错误功能并使用 HTML 根据您的需要设置样式:

树枝:

{# render only the error messages related to this field #}
{{ form_errors(form.name) }}

{# render any "global" errors not associated to any form field #}
{{ form_errors(form) }}

您需要了解的一切都可以在这里找到


0
投票

您还可以使用 javascript 来定位特定的 div 类,并根据您的喜好更改文本。

© www.soinside.com 2019 - 2024. All rights reserved.