<p dir="auto">I have seen similar bug reports, apologies if this is a duplicate. In my case, when I am using a collection field as follows:</p>
<div class="highlight highlight-text-html-php notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="$builder-&gt;add('goods', 'collection', array(
            'type' =&gt; new GoodType(),
            'allow_add' =&gt; true,
            'allow_delete' =&gt; true,
            'prototype' =&gt; true,
            'by_reference' =&gt; false
        ));"><pre class="notranslate"><span class="pl-s1"><span class="pl-c1">$</span>builder</span>-&gt;<span class="pl-en">add</span>(<span class="pl-s">'goods'</span>, <span class="pl-s">'collection'</span>, <span class="pl-en">array</span>(
            <span class="pl-s">'type'</span> =&gt; <span class="pl-k">new</span> <span class="pl-v">GoodType</span>(),
            <span class="pl-s">'allow_add'</span> =&gt; <span class="pl-c1">true</span>,
            <span class="pl-s">'allow_delete'</span> =&gt; <span class="pl-c1">true</span>,
            <span class="pl-s">'prototype'</span> =&gt; <span class="pl-c1">true</span>,
            <span class="pl-s">'by_reference'</span> =&gt; <span class="pl-c1">false</span>
        ));</pre></div>
<p dir="auto">And a callback validator</p>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content=" constraints:
        - Callback:
            methods: [checkGoods]"><pre class="notranslate"> <span class="pl-ent">constraints</span>:
        - <span class="pl-ent">Callback</span>:
            <span class="pl-ent">methods</span>: <span class="pl-s">[checkGoods]</span></pre></div>
<div class="highlight highlight-text-html-php notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="    /**
     * Callback validator for Goods
     * @param ExecutionContext $context
     */
    public function checkGoods(\Symfony\Component\Validator\ExecutionContext $context) {
        if (! is_null($this-&gt;goods) &amp;&amp; $this-&gt;goods-&gt;count() == 0) {
            $propertyPath = $context-&gt;getPropertyPath() . '.goods';
            $context-&gt;setPropertyPath($propertyPath);
            $context-&gt;addViolation('Please provide at least one good', array(), null);
        }
    }"><pre class="notranslate">    <span class="pl-c">/**</span>
<span class="pl-c">     * Callback validator for Goods</span>
<span class="pl-c">     * @param ExecutionContext $context</span>
<span class="pl-c">     */</span>
    <span class="pl-k">public</span> <span class="pl-k">function</span> <span class="pl-en">checkGoods</span>(<span class="pl-smi"><span class="pl-smi">\<span class="pl-v">Symfony</span>\<span class="pl-v">Component</span>\<span class="pl-v">Validator</span>\<span class="pl-v">ExecutionContext</span></span></span> <span class="pl-s1"><span class="pl-c1">$</span>context</span>) {
        <span class="pl-k">if</span> (! is_null(<span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">goods</span>) &amp;&amp; <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">goods</span>-&gt;<span class="pl-en">count</span>() == <span class="pl-c1">0</span>) {
            <span class="pl-s1"><span class="pl-c1">$</span>propertyPath</span> = <span class="pl-s1"><span class="pl-c1">$</span>context</span>-&gt;<span class="pl-en">getPropertyPath</span>() . <span class="pl-s">'.goods'</span>;
            <span class="pl-s1"><span class="pl-c1">$</span>context</span>-&gt;<span class="pl-en">setPropertyPath</span>(<span class="pl-s1"><span class="pl-c1">$</span>propertyPath</span>);
            <span class="pl-s1"><span class="pl-c1">$</span>context</span>-&gt;<span class="pl-en">addViolation</span>(<span class="pl-s">'Please provide at least one good'</span>, <span class="pl-en">array</span>(), <span class="pl-c1">null</span>);
        }
    }</pre></div>
<p dir="auto">I see the "Please provide at least one good" at the root of the form, where</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="{{ form_errors(form) }} "><pre lang="text" class="notranslate"><code class="notranslate">{{ form_errors(form) }} 
</code></pre></div>
<p dir="auto">is called, but I expect it to be output with the field itself, presumably in the div that contains the data-prototype definition.</p>
<p dir="auto">Hello,</p>
<p dir="auto">I'm having a problem with collection field type. If I set error_bubbling to false in order to display errors next to collection field label I will get these errors output twice. Seems that errors get written in form_row and then in form_widget:</p>
<div class="highlight highlight-text-html-basic notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{% block collection_widget %}
{% spaceless %}
    {% if prototype is defined %}
        {% set attr = attr|merge({'data-prototype': form_row(prototype) }) %}
    {% endif %}
    {{ block('form_widget') }}
{% endspaceless %}"><pre class="notranslate">{% block collection_widget %}
{% spaceless %}
    {% if prototype is defined %}
        {% set attr = attr|merge({'data-prototype': form_row(prototype) }) %}
    {% endif %}
    {{ block('form_widget') }}
{% endspaceless %}</pre></div>
<p dir="auto">The following fix worked for me</p>
<div class="highlight highlight-text-html-basic notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{% block collection_row %}
{{ form_label(form) }}
{{ form_widget(form) }}
{% endblock %}"><pre class="notranslate">{% block collection_row %}
{{ form_label(form) }}
{{ form_widget(form) }}
{% endblock %}</pre></div>
<p dir="auto">BTW why render forms with form_widget instead of form_row? The problem was generally caused by this and at first glance the form_row approach seems more consistent (in regard field types).</p>