简单检查表单字段在 Twig 模板中是不是有错误

Posted

技术标签:

【中文标题】简单检查表单字段在 Twig 模板中是不是有错误【英文标题】:Simple check if form field has errors in Twig template简单检查表单字段在 Twig 模板中是否有错误 【发布时间】:2012-02-13 10:31:58 【问题描述】:

在 Twig 模板中,我检查一个字段是否有这样的错误:

% if form.points.get('errors') is not empty %

有没有类似的方法:

% if form.points.hasErrors() %

做起来更简单?差别不大,但如果我不能更轻松,为什么不呢。

【问题讨论】:

添加了许多答案,其中一些取决于error_bubbling 设置。我在 symfony 食谱中添加了一个 PR 来改进文档。随意在这里投票:github.com/symfony/symfony-docs/issues/6145 查看我关于如何使用 symfony 3.4 进行操作的评论,通过 twig for&set 或控制器内部的肮脏方式:***.com/a/49785276/7491491 如果它解决了您的需求,请不要忘记投票:) 【参考方案1】:

检查表单是否有错误的最简单方法:

% if not form.vars.errors|length %

% endif %

Symfony 版本 >= 4

【讨论】:

【参考方案2】:

如果您使用的是 symfony 4,您可以使用此代码检查是否存在错误

% if form_errors(registrationForm) %
    <div class="alert alert-danger">        
         form_errors(registrationForm) 
    </div>
% endif %

【讨论】:

【参考方案3】:

这是我用的:

 <div class="form-group  form.brand.vars.errors|length > '' ? 'has-error' ">

【讨论】:

【参考方案4】:

我遇到了类似的问题,但我的树枝模板中不存在form.points

我必须获取控制器中的错误数量,然后将其作为变量传递到我的模板中。 $form-&gt;getErrors() 的行为与您在控制器中的预期不同。请参阅this SO question 以获取正确获取表单错误的函数。

【讨论】:

【参考方案5】:

对于更深入的表单定制,我会这样做:

<div class="form-group % if form.MYFORMINPUT.vars.valid==false %has-error% endif %">
//some twisted divs
form_label(form.MYFORMINPUT)
form_widget(form.MYFORMINPUT)
</div>

Sf2.5

【讨论】:

【参考方案6】:

我创建了一个树枝扩展来处理这个问题: 我的扩展

public function hasError($string)

    if(strlen($string) > 4)
        return true;
    return false;

我在twig中这样使用它

 has_error(form_errors(form.username)) ? form_errors(form.username) : '' 

【讨论】:

【参考方案7】:

由于空数组解析为 false,您可以将现有检查缩短为

% if form.WIDGET_NAME.get('errors') %

【讨论】:

【参考方案8】:

我发现更好的方法是使用这种代码

% if not form.vars.valid %
<div class="alert alert-error">
     form_errors(form) 
</div>
% endif %

【讨论】:

遗憾的是,这对我不起作用,而调用 form_errors(form.somefield) 仍然有效。 @ex3v 这取决于您如何设置错误冒泡 你能扩展你的答案吗? @ex3v 如此处所述symfony.com/doc/current/reference/forms/types/… 默认行为已将其设置为有效字段显示的所有错误。使用 form_row(form.field) 或 form_errors(form.field) 将显示它们。如果您为该字段设置了 error_bubbling true。错误将显示在他的父窗体中。 谢谢!但是当您已经拥有 100 个表格时,事情就变得复杂了。我正在编写 bundle 来帮助解决这个问题,完成后会分享。【参考方案9】:

您还可以在覆盖字段渲染时检查错误:

% block field_row %
% spaceless %    
    <div class="control-group % if errors %error% endif %">
       form_label(form) 
      <div class="controls">
         form_widget(form)         
         form_errors(form)         
      </div>
    </div>    
% endspaceless %
% endblock field_row %

【讨论】:

【参考方案10】:

该方法不存在。我通常做% if form.points.vars.errors|length %

【讨论】:

这对我使用 Symfony 2.3 时不起作用。 birko 的form.vars.valid 解决方案工作正常。 @binarious 这个方法在 Symfony 2.3 中运行良好,但你是对的,birko 的解决方案现在更好了。 出现错误时,此解决方案会产生0 IF error_bubbling is set to True in form type. 无法完成这项工作。我想要每场治疗。不要一次处理所有错误。如何检查一个字段是否有效?这和 form.MYFORMINPUT.vars.valid 都不起作用。 太好了,有效!!

以上是关于简单检查表单字段在 Twig 模板中是不是有错误的主要内容,如果未能解决你的问题,请参考以下文章

Twig - 迭代表单字段

Symfony-twig模板表单主题错误

如何检查表单字段中是不是有呈现控制器的树枝模板中的数据

如何以编程方式检查/ lint一个Twig模板

在Javascript / Jquery的Twig模板中添加翻译

在 Symfony 4.4 中覆盖复选框表单字段产生重复标签且没有字段