public function testConstructor() { $descriptor = ObjectDescriberFactory::create('PowerLinks\\OpenRtb\\BidRequest\\BidRequest'); $this->assertEquals('PowerLinks\\OpenRtb\\BidRequest\\BidRequest', $descriptor->getClassName()); $this->assertEquals('PowerLinks\\OpenRtb\\BidRequest', $descriptor->getNamespace()); $this->assertEquals(16, $descriptor->properties->count()); $this->assertInstanceOf('Traversable', $descriptor->properties); foreach ($descriptor->properties as $propertyName => $property) { $this->assertTrue(is_string($propertyName)); $this->assertEquals($propertyName, $property->get('name')); $this->assertInstanceOf('PowerLinks\\OpenRtb\\Tools\\ObjectAnalyzer\\AnnotationsBag', $property); } $this->assertTrue($descriptor->properties->get('id')->isRequired()); $this->assertFalse($descriptor->properties->get('id')->isObject()); $this->assertEquals('string', $descriptor->properties->get('id')->get('var')); $this->assertInstanceOf('Traversable', $descriptor->methods); $this->assertTrue($descriptor->methods->has('setId')); $this->assertTrue($descriptor->methods->has('getId')); $this->assertTrue($descriptor->methods->get('setId')); $this->assertTrue($descriptor->methods->get('getId')); $this->assertTrue($descriptor->methods->has('getArrayFromObject')); $this->assertFalse($descriptor->methods->get('getArrayFromObject')); }
/** * @param array $data * @param $object * @return mixed * @throws \Exception */ public static function hydrate(array $data, $object) { $objectDescriptor = ObjectDescriberFactory::create($object); $data = self::checkFirstArrayKey($data, $objectDescriptor); foreach ($data as $key => $value) { if (is_array($value) && $objectDescriptor->properties->has($key) && $objectDescriptor->properties->get($key)->isObject() && $objectDescriptor->properties->get($key)->get('var') == 'ArrayCollection') { self::set($object, $key, self::getDependencyObject($objectDescriptor, $key)); $method = 'add' . ucfirst($key); if (!$objectDescriptor->methods->has($method) || !$objectDescriptor->methods->get($method)) { throw new \Exception(sprintf('Method %s does not exist', $method)); } foreach ($value as $item) { $object->{$method}(self::hydrate($item, self::getDependencyObject($objectDescriptor, ucfirst($key), false))); } } elseif (is_array($value) && $objectDescriptor->properties->has($key) && $objectDescriptor->properties->get($key)->isObject()) { self::set($object, $key, self::hydrate($value, self::getDependencyObject($objectDescriptor, $key))); } elseif ($objectDescriptor->properties->has($key)) { self::set($object, $key, $value); } elseif ($object instanceof \PowerLinks\OpenRtb\Tools\Classes\Ext) { $object->set($key, $value); } } return $object; }
/** * @return \PowerLinks\OpenRtb\Tools\ObjectAnalyzer\ParametersBag * @throws \Exception */ private function getProperties() { $objectDescriptor = ObjectDescriberFactory::create(__CLASS__); return $objectDescriptor->properties; }