是否可以对表单进行验证,但同时将其保留在字段上?我试图将所有错误显示在页面顶部,但我还希望在错误字段周围有一个红色边框。此外,我在顶部的每个错误都应该有一个链接,重点关注具有该错误的字段。
如果我使用{{ form_errors(form.title) }}
,则无法访问{{ form_errors(form) }}
。如果我在该字段上使用error_bubbling => true
,则我无法访问{{ form_errors(form.title) }}
。我正在考虑在我的控制器中构建我的错误显示,但如果我这样做,我将失去Twig的功能。
答案 0 :(得分:0)
自定义form_row
块以显示错误
{% block form_row %}
<div class="form-group{% if errors|length == 1 %} has-error{% endif %}">
{{ form_label(form, label|default(null)) }}
{{ form_widget(form, { 'attr' : { 'class' : 'form-control' } } ) }}
</div>
{% endblock form_row %}
自定义form_errors
可点击。您可以创建一个jQuery函数来监听li
上的点击。在该函数中,获取所点击的id
删除 RelatedField 的li
以获取字段ID
{% block form_errors -%}
{% if errors|length > 0 -%}
<ul id="allErrors">
{%- for error in errors -%}
<li id="RelatedField{{ error.id }}">{{ error.message }}</a></li>
{%- endfor -%}
</ul>
{%- endif %}
{%- endblock form_errors %}
<强>参考强>
答案 1 :(得分:0)
这是我目前正在使用的解决方案,我不知道它是否是一个好的解决方案。 Personnaly我宁愿在Twig做这一切,但我找不到更好的方法。
DefaultController.php :我将$ errors传递给了我的观点。
$errors = array();
if ($request->getMethod() == 'POST') {
$form->bind($this->getRequest());
if ($form->isValid()) {
...
} else {
foreach ($form->all() as $child) {
if (!$child->isValid()) {
$errors[$form->getName().'_'.$child->getName()] = substr($child->getErrorsAsString(),7);
}
}
}
}
<强> template.html.twig 强>
{% if errors|length > 0 %}
<ul>
{% for key, error in errors %}
<li><a href="javascript:void(0);" data-id="{{ key }}" class="errorClick">{{ error }}</a></li>
{% endfor %}
</ul>
{% endif %}
{% block form_widget_simple %}
{% spaceless %}
{% set type = type|default('text') %}
<input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %} {% if errors|length > 0 %}class="error"{% endif %} />
{% endspaceless %}
{% endblock form_widget_simple %}
<强>的script.js 强>
$('.errorClick').click(function() {
$('#'+$(this).attr('data-id')).focus();
});