Beispiel #1
0
 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);
 }
Beispiel #2
0
 /**
  * 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);
 }