<p dir="auto">Most of RESTFull API's just ignores extra data submitted to their actions because in some cases doesn't make any sense show an error, mainly when you are working with unnamed forms. When you don't have subforms, a terrible workaround with problematic performance is:</p>
<div class="highlight highlight-text-html-php notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="    $data = $request-&gt;request-&gt;all(); // -&gt;get($form-&gt;getName());
    $children = $form-&gt;all();
    $data = array_intersect_key($data, $children);
    $form-&gt;bind($data);"><pre class="notranslate">    <span class="pl-s1"><span class="pl-c1">$</span>data</span> = <span class="pl-s1"><span class="pl-c1">$</span>request</span>-&gt;<span class="pl-c1">request</span>-&gt;<span class="pl-en">all</span>(); <span class="pl-c">// -&gt;get($form-&gt;getName());</span>
    <span class="pl-s1"><span class="pl-c1">$</span>children</span> = <span class="pl-s1"><span class="pl-c1">$</span>form</span>-&gt;<span class="pl-en">all</span>();
    <span class="pl-s1"><span class="pl-c1">$</span>data</span> = array_intersect_key(<span class="pl-s1"><span class="pl-c1">$</span>data</span>, <span class="pl-s1"><span class="pl-c1">$</span>children</span>);
    <span class="pl-s1"><span class="pl-c1">$</span>form</span>-&gt;<span class="pl-en">bind</span>(<span class="pl-s1"><span class="pl-c1">$</span>data</span>);</pre></div>
<p dir="auto">So, I suggest introducing a new simple option in the form configuration:</p>
<div class="highlight highlight-text-html-php notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="$factory-&gt;create('acme.form', $model, array('ignore_extra_data' =&gt; true));"><pre class="notranslate"><span class="pl-s1"><span class="pl-c1">$</span>factory</span>-&gt;<span class="pl-en">create</span>(<span class="pl-s">'acme.form'</span>, <span class="pl-s1"><span class="pl-c1">$</span>model</span>, <span class="pl-en">array</span>(<span class="pl-s">'ignore_extra_data'</span> =&gt; <span class="pl-c1">true</span>));</pre></div>
<div class="highlight highlight-text-html-php notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="        // Mark the form with an error if it contains extra fields
        if (false == $config-&gt;getOption('ignore_extra_data') &amp;&amp; count($form-&gt;getExtraData()) &gt; 0) {
            $this-&gt;context-&gt;addViolation(
                $config-&gt;getOption('extra_fields_message'),
                array('{{ extra_fields }}' =&gt; implode('&quot;, &quot;', array_keys($form-&gt;getExtraData()))),
                $form-&gt;getExtraData()
            );
        }"><pre class="notranslate">        <span class="pl-c">// Mark the form with an error if it contains extra fields</span>
        <span class="pl-k">if</span> (<span class="pl-c1">false</span> == <span class="pl-s1"><span class="pl-c1">$</span>config</span>-&gt;<span class="pl-en">getOption</span>(<span class="pl-s">'ignore_extra_data'</span>) &amp;&amp; count(<span class="pl-s1"><span class="pl-c1">$</span>form</span>-&gt;<span class="pl-en">getExtraData</span>()) &gt; <span class="pl-c1">0</span>) {
            <span class="pl-s1"><span class="pl-c1">$</span><span class="pl-smi">this</span></span>-&gt;<span class="pl-c1">context</span>-&gt;<span class="pl-en">addViolation</span>(
                <span class="pl-s1"><span class="pl-c1">$</span>config</span>-&gt;<span class="pl-en">getOption</span>(<span class="pl-s">'extra_fields_message'</span>),
                <span class="pl-en">array</span>(<span class="pl-s">'{{ extra_fields }}'</span> =&gt; implode(<span class="pl-s">'", "'</span>, array_keys(<span class="pl-s1"><span class="pl-c1">$</span>form</span>-&gt;<span class="pl-en">getExtraData</span>()))),
                <span class="pl-s1"><span class="pl-c1">$</span>form</span>-&gt;<span class="pl-en">getExtraData</span>()
            );
        }</pre></div>
<p dir="auto"><a href="https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php#L108">https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php#L108</a></p>
<p dir="auto">Once the default value is <code class="notranslate">false</code>, it'll not cause BC breaks.</p>
<p dir="auto">If you agree, I'll be happy in submit a PR.</p>
<p dir="auto"><code class="notranslate">bind</code>ing partial parameters effectively clears all existing values from the model and only persists the new parameters that are passed in.  See example:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="// Author.php
class Author
{
    public $name;
    public $email = 'bar';
}

// AuthorType
...
$builder-&gt;add('name', 'text')-&gt;author('text');
..."><pre class="notranslate"><code class="notranslate">// Author.php
class Author
{
    public $name;
    public $email = 'bar';
}

// AuthorType
...
$builder-&gt;add('name', 'text')-&gt;author('text');
...
</code></pre></div>
<p dir="auto">Passing <code class="notranslate">$form-&gt;bind(array('name' =&gt; 'foo'))</code> wipes out the existing <code class="notranslate">email</code> value.</p>