public function getComposedEntity() { $address = new TestAsset\Entity\Address(); $address->setStreet('1 Rue des Champs Elysées'); $city = new TestAsset\Entity\City(); $city->setName('Paris'); $city->setZipCode('75008'); $country = new TestAsset\Entity\Country(); $country->setName('France'); $country->setContinent('Europe'); $city->setCountry($country); $address->setCity($city); return $address; }
public function testNestedCollections() { // @see https://github.com/zendframework/zf2/issues/5640 $addressesFieldeset = new \ZendTest\Form\TestAsset\AddressFieldset(); $addressesFieldeset->setHydrator(new \Zend\Stdlib\Hydrator\ClassMethods()); $form = new Form(); $form->setHydrator(new ObjectPropertyHydrator()); $form->add(array('name' => 'addresses', 'type' => 'Collection', 'options' => array('target_element' => $addressesFieldeset, 'count' => 2))); $data = array(array('number' => '0000000001', 'street' => 'street1'), array('number' => '0000000002', 'street' => 'street2')); $phone1 = new Phone(); $phone1->setNumber($data[0]['number']); $phone2 = new Phone(); $phone2->setNumber($data[1]['number']); $address1 = new Address(); $address1->setStreet($data[0]['street']); $address1->setPhones(array($phone1)); $address2 = new Address(); $address2->setStreet($data[1]['street']); $address2->setPhones(array($phone2)); $customer = new stdClass(); $customer->addresses = array($address1, $address2); $form->bind($customer); //test for object binding foreach ($form->get('addresses')->getFieldsets() as $_fieldset) { $this->assertInstanceOf('ZendTest\\Form\\TestAsset\\Entity\\Address', $_fieldset->getObject()); foreach ($_fieldset->getFieldsets() as $_childFieldsetName => $_childFieldset) { switch ($_childFieldsetName) { case 'city': $this->assertInstanceOf('ZendTest\\Form\\TestAsset\\Entity\\City', $_childFieldset->getObject()); break; case 'phones': foreach ($_childFieldset->getFieldsets() as $_phoneFieldset) { $this->assertInstanceOf('ZendTest\\Form\\TestAsset\\Entity\\Phone', $_phoneFieldset->getObject()); } break; } } } //test for correct extract and populate $index = 0; foreach ($form->get('addresses') as $_addresses) { $this->assertEquals($data[$index]['street'], $_addresses->get('street')->getValue()); //assuming data has just 1 phone entry foreach ($_addresses->get('phones') as $phone) { $this->assertEquals($data[$index]['number'], $phone->get('number')->getValue()); } $index++; } }