/** * @param \ReflectionClass $class * @return FormMetadata */ private function getClassFormFields(\ReflectionClass $class) { $metadata = new FormMetadata(); $reader = new \Doctrine\Common\Annotations\AnnotationReader(); /** @var \ReflectionProperty[] $properties */ $properties = $class->getProperties(); foreach ($properties as $property) { $field = $reader->getPropertyAnnotation($property, 'Corleonis\\FormMetadataBundle\\Configuration\\Field'); $fieldGroup = $reader->getPropertyAnnotation($property, 'Corleonis\\FormMetadataBundle\\Configuration\\FieldGroup'); $formType = $reader->getPropertyAnnotation($property, 'Corleonis\\FormMetadataBundle\\Configuration\\FormType'); $fieldEntity = $reader->getPropertyAnnotation($property, 'Corleonis\\FormMetadataBundle\\Configuration\\FieldEntity'); // prepare the option fields for our field if ($field && $field->value) { $preparer = FieldOptionPreparerFactory::get($field->value); if ($preparer) { $preparer->prepare($field); } } if (!empty($fieldGroup) && !empty($field)) { if (empty($field->name)) { $field->name = $property->getName(); } $metadata->addGroup($fieldGroup, $field); } elseif (!empty($field)) { if (empty($field->name)) { $field->name = $property->getName(); } $metadata->addField($field); } if (!empty($formType)) { if (empty($field->name)) { $formType->name = $property->getName(); } $metadata->addFormType($formType); } if (!empty($fieldEntity)) { if (empty($field->name)) { $fieldEntity->name = $property->getName(); } $metadata->addFieldEntity($fieldEntity); } } return $metadata; }
/** * @param FormMetadata $refObject * @return void */ public function merge(FormMetadata $refObject) { $this->fields = array_merge($this->fields, $refObject->getFields()); $this->groups = array_merge($this->groups, $refObject->getGroups()); $this->formTypes = array_merge($this->formTypes, $refObject->getFormTypes()); $this->fieldEntities = array_merge($this->fieldEntities, $refObject->getFieldEntities()); }