public function testIfWillDecorateWithCompoundDecorator() { $model = new WithPlainEmbedded(); $model->stats = new SimplePlainEmbedded(); $decorator = new Decorator($model, RawArray::class); $dbValue = ['stats' => []]; $decorator->write('stats', $dbValue); $this->assertSame($dbValue['stats']['_class'], get_class($model->stats)); $this->assertSame($dbValue['stats']['visits'], $model->stats->visits); }
/** * Returns the given object as an associative array * @param AnnotatedInterface|object $model * @param string[] $fields Fields to transform * @return array an associative array of the contents of this object */ public static function fromModel(AnnotatedInterface $model, $fields = []) { $meta = static::getMeta($model); $calledClass = get_called_class(); $decorator = new Decorator($model, $calledClass, $meta); $md = new ModelDecorator($model, $calledClass, $meta); $sanitizer = new Sanitizer($model, $calledClass, $meta); $filter = new Filter($model, $calledClass, $meta); $arr = []; foreach ($meta->fields() as $name => $fieldMeta) { if (!empty($fields) && !in_array($name, $fields)) { continue; } if (!$filter->fromModel($model, $fieldMeta)) { continue; } $model->{$name} = $sanitizer->write($name, $model->{$name}); $decorator->write($name, $arr); $model->{$name} = $sanitizer->read($name, $model->{$name}); } $md->write($arr); return FinalizingManager::fromModel($arr, static::class, $model); }