/** * @param OptionsResolver $resolver */ protected function configureOptions(OptionsResolver $resolver) { $resolver->setRequired(['fields', 'associations', 'callbacks']); $fieldsNormalizer = function (Options $options, $fields) { $collection = new Collection\FieldMetadataCollection(); $factory = new FieldMetadataFactory(); foreach ($fields as $fieldName => $parameters) { $fieldMetadata = $factory->create($fieldName, $parameters); $collection->add($fieldMetadata); } return $collection; }; $associationsNormalizer = function (Options $options, $associations) { $collection = new Collection\AssociationMetadataCollection(); $factory = new AssociationMetadataFactory(); foreach ($associations as $associationName => $parameters) { $associationMetadata = $factory->create($associationName, $parameters); $collection->add($associationMetadata); } return $collection; }; $resolver->setNormalizer('fields', $fieldsNormalizer); $resolver->setNormalizer('associations', $associationsNormalizer); $resolver->setDefaults(['fields' => new Collection\FieldMetadataCollection(), 'associations' => new Collection\AssociationMetadataCollection(), 'callbacks' => []]); $resolver->setAllowedTypes('fields', ['array', Collection\FieldMetadataCollection::class]); $resolver->setAllowedTypes('associations', ['array', Collection\AssociationMetadataCollection::class]); $resolver->setAllowedTypes('callbacks', 'array'); }
/** * Updates the resource fields with given data * * @param array $properties * @param FieldMetadataCollection $collection * @param object $resource */ protected function updateEntityFields(array $properties, FieldMetadataCollection $collection, $resource) { foreach ($properties as $propertyName => $propertyValue) { if ($collection->has($propertyName) && is_scalar($propertyValue)) { if ($this->propertyAccessor->isWritable($resource, $propertyName)) { $this->propertyAccessor->setValue($resource, $propertyName, $propertyValue); } } } }
/** * Checks whether the embeddable field is serializable * * @param string $embeddableName * @param FieldMetadataCollection $collection * * @return bool */ protected function isEmbeddableSerializable($embeddableName, FieldMetadataCollection $collection) { if ($collection->has($embeddableName)) { $embeddable = $collection->get($embeddableName); return $embeddable->hasGroup($this->context['group']) || $embeddable->hasDefaultGroup(); } return false; }