/** * Method getFieldDefinitionsRecursive * * @param DefinitionElementInterface $field * @return Schema\Field[] */ private function processFieldDefinitionsRecursive(DefinitionElementInterface $field) { if ($field instanceof JsonDefinitionField) { $clone = clone $field->getDef(); $clone->setName(preg_replace('/^' . preg_quote($this->name, '/') . '\\.(\\d+\\.)*/', '', $clone->getName())); return [$clone]; } elseif ($field instanceof JsonDefinitionArray) { return $this->processFieldDefinitionsRecursive($field->getElement()); } elseif ($field instanceof JsonDefinitionHash) { return array_reduce($field->fields, function (array $subfields, DefinitionElementInterface $subfield) { return array_merge($subfields, $this->processFieldDefinitionsRecursive($subfield)); }, []); } throw new \InvalidArgumentException(sprintf('Unknown field type "%s"', get_class($field))); }
/** * Returns the field type in a serializer-understandable way.. * * @return string Type */ public function getTypeSerializer() { return 'array<' . $this->element->getTypeSerializer() . '>'; }
/** * Method getFieldDefinitionsRecursive * * @param DefinitionElementInterface $field * @return Schema\Field[] */ private function processFieldDefinitionsRecursive(DefinitionElementInterface $field) { if ($field instanceof JsonDefinitionField) { return [$this->cloneFieldDefinition($field->getDef())]; } elseif ($field instanceof JsonDefinitionArray) { return $this->processFieldDefinitionsRecursive($field->getElement()); } elseif ($field instanceof JsonDefinitionHash) { return array_reduce($field->fields, function (array $subfields, DefinitionElementInterface $subfield) { return array_merge($subfields, $this->processFieldDefinitionsRecursive($subfield)); }, $field->definition === null ? [] : [$this->cloneFieldDefinition($field->definition)]); } throw new \InvalidArgumentException(sprintf('Unknown field type "%s"', get_class($field))); }