/** * Transform one object * * @param $object * @param MapInterface $map * @param string $context * @return array */ public function transform($object, MapInterface $map, $context) { // Iterate by map $fields = []; foreach ($map->getMap() as $path => $callback) { if (is_string($callback)) { $fields[$path] = $object->{$callback}(); } elseif (isset($callback['converter']) && is_string($callback['converter'])) { /** @var ConverterInterface $converter */ $converter = $this->container->get($callback['converter']); if (isset($callback['collection']) && $callback['collection']) { $fields[$path] = $converter->reverseConvertCollection($object->{$callback}['method']()); } else { $fields[$path] = $converter->reverseConvert($object->{$callback}['method']()); } } elseif (isset($callback['converter']) && $callback['converter'] instanceof ConverterInterface) { /** @var ConverterInterface $converter */ $converter = $callback['converter']; if (isset($callback['collection']) && $callback['collection']) { $fields[$path] = $converter->reverseConvertCollection($object->{$callback}['method']()); } else { $fields[$path] = $converter->reverseConvert($object->{$callback}['method']()); } } } $fields += $this->permissionManager->getPermissions($object, $context); return $fields; }
/** * Populating object from data model * @param array|ParameterBag $model * @param $object * @param MapInterface $map */ public function bindContent($model, $object, MapInterface $map) { foreach ($map->getReverseMap() as $method => $value) { if (is_string($value)) { // if $value is string then working without converter if (array_key_exists($value, $model)) { $object->{$method}($model[$value]); } } elseif (isset($value['converter']) && is_string($value['converter'])) { // if converter is service then using as service /** @var ConverterInterface $converter */ $converter = $this->container->get($value['converter']); $child = $converter->convert($model[$value['path']]); $child && $object->{$method}($child); } elseif (isset($value['converter']) && $value['converter'] instanceof ConverterInterface) { // else trying use object as converter $converter = $value['converter']; $child = $converter->convert($model[$value['path']]); $child && $object->{$method}($child); } } }