简单检查表单字段在 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->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 模板中是不是有错误的主要内容,如果未能解决你的问题,请参考以下文章