Issue
In a functional test of a form to add members of an ArrayCollection there is this statement:
$form['client[members][1][fname]'] = 'Benny';
The field name was verified with a DOM inspector.
The console output at this line is:
InvalidArgumentException: Unreachable field "members"
G:\Documents\workspace\sym\vendor\symfony\symfony\src\Symfony\Component\DomCrawler\Form.php:459
G:\Documents\workspace\sym\vendor\symfony\symfony\src\Symfony\Component\DomCrawler\Form.php:496
G:\Documents\workspace\sym\vendor\symfony\symfony\src\Symfony\Component\DomCrawler\Form.php:319
G:\Documents\workspace\sym\src\Mana\ClientBundle\Tests\Controller\ClientControllerTest.php:57
What method should be used to test the addition of an ArrayCollection member?
Edit as requested (n.b., follow redirects is on):
//link to trigger adding household member form $link = $crawler->selectLink('Add household member')->link(); $crawler = $client->click($link); $form = $crawler->selectButton('Add client')->form(); $form['client[members][1][fname]'] = 'Benny'; $form['client[members][1][dob]'] = "3/12/1999"; $crawler = $client->submit($form); $this->assertTrue($crawler->filter('html:contains("Client View Form")')->count() > 0);
Solution
I just had the same issue and after a bit of research I found a solution which helped me.
A solution to remove a field from a Collection form type
This post is not exactly what you were looking for, this one is for removing an element and not adding new ones. But the principle is the same. What I did instead of $form->setValues() ... $form->getPhpValues() that I've created an array, and POSTed that
In the example bellow, the configurations field of the form is a Collection
$submitButton = $crawler->selectButton(self::BUTTON_ADD_APPLICATION);
$form = $submitButton->form();
$values = array(
'Setup' => array(
'_token' => $form['Setup[_token]']->getValue(),
'name' => 'My New Setup',
'configurations' => array(
0 => array(
'country' => 'HUN',
'value' => '3',
),
1 => array(
'country' => 'GBR',
'value' => '0',
),
),
),
);
$client->request($form->getMethod(), $form->getUri(), $values);
Hope it helps! And thanks for sstok for the original solution!
Answered By - jkrnak
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.