propertyAccessor = PropertyAccess::createPropertyAccessorBuilder() ->disableExceptionOnInvalidPropertyPath() ->getPropertyAccessor() ; } /** * {@inheritdoc} */ public function getFunctions() { return [ new TwigFunction('entity_to_array', [$this, 'toArray']), ]; } public function toArray(EntityInterface $entity, bool $keepIterable = true, array $except = []): array { $metaData = $this->entityManager->getClassMetadata(get_class($entity)); $array = []; foreach ($metaData->fieldNames as $field) { try { $value = $this->propertyAccessor->getValue($entity, $field); if (in_array($field, $except)) { continue; } if (is_iterable($value) && !$keepIterable) { continue; } if (is_object($value)) { $value = (string) $value; } $array[$field] = [ 'id' => $field, 'name' => Str::asHumanWords($field), 'value' => $value, ]; } catch (\Error $e) { } } return $array; } }