/**
  * 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)));
 }
Example #2
0
 /**
  * Returns the field type in a serializer-understandable way..
  *
  * @return string Type
  */
 public function getTypeSerializer()
 {
     return 'array<' . $this->element->getTypeSerializer() . '>';
 }
Example #3
0
 /**
  * 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)));
 }