@@ -699,6 +699,48 @@ their type::
699
699
PHP format (it converts the keys with square brackets notation - e.g.
700
700
``my_form[subject] `` - to PHP arrays).
701
701
702
+ If you use a :doc: `Collection of Forms </cookbook/form/form_collections >`,
703
+ you can't add fields to an existing form with
704
+ ``$form['task[tags][0][name]'] = 'foo'; ``. This results in an error
705
+ ``Unreachable field "…" `` because ``$form `` can only be used in order to
706
+ set values of existing fields. In order to add new fields, you have to
707
+ add the values to the raw data array::
708
+
709
+ // Get the form.
710
+ $form = $crawler->filter('button')->form();
711
+
712
+ // Get the raw values.
713
+ $values = $form->getPhpValues();
714
+
715
+ // Add fields to the raw values.
716
+ $values['task']['tag'][0]['name'] = 'foo';
717
+ $values['task']['tag'][1]['name'] = 'bar';
718
+
719
+ // Submit the form with the existing and new values.
720
+ $crawler = $this->client->request($form->getMethod(), $form->getUri(), $values,
721
+ $form->getPhpFiles());
722
+
723
+ // The 2 tags have been added to the collection.
724
+ $this->assertEquals(2, $crawler->filter('ul.tags > li')->count());
725
+
726
+ Where ``task[tags][0][name] `` is the name of a field created
727
+ with JavaScript.
728
+
729
+ You can remove an existing field, e.g. a tag::
730
+
731
+ // Get the values of the form.
732
+ $values = $form->getPhpValues();
733
+
734
+ // Remove the first tag.
735
+ unset($values['task']['tags'][0]);
736
+
737
+ // Submit the data.
738
+ $crawler = $client->request($form->getMethod(), $form->getUri(),
739
+ $values, $form->getPhpFiles());
740
+
741
+ // The tag has been removed.
742
+ $this->assertEquals(0, $crawler->filter('ul.tags > li')->count());
743
+
702
744
.. index ::
703
745
pair: Tests; Configuration
704
746
0 commit comments