jsonapi.info.yml | 2 +- src/JsonapiServiceProvider.php | 7 +++++++ src/Normalizer/ScalarNormalizer.php | 42 +++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/jsonapi.info.yml b/jsonapi.info.yml index 3702756..cd3b601 100644 --- a/jsonapi.info.yml +++ b/jsonapi.info.yml @@ -4,5 +4,5 @@ description: Provides a JSON API standards-compliant API for accessing and manip core: 8.x package: Web services dependencies: - - drupal:system (>=8.3) + - drupal:system (>=8.2) - serialization diff --git a/src/JsonapiServiceProvider.php b/src/JsonapiServiceProvider.php index f801059..63c5b9e 100644 --- a/src/JsonapiServiceProvider.php +++ b/src/JsonapiServiceProvider.php @@ -6,6 +6,7 @@ use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Core\DependencyInjection\ServiceModifierInterface; use Drupal\Core\DependencyInjection\ServiceProviderInterface; use Drupal\jsonapi\DependencyInjection\Compiler\RemoveJsonapiFormatCompilerPass; +use Drupal\jsonapi\Normalizer\ScalarNormalizer; use Symfony\Component\DependencyInjection\Compiler\PassConfig; /** @@ -29,6 +30,12 @@ class JsonapiServiceProvider implements ServiceModifierInterface, ServiceProvide ['application/vnd.api+json'], ]); } + + // BC for Drupal 8.2. + if (!$container->has('serializer.normalizer.primitive_data')) { + $container->register('serializer.normalizer.scalar.jsonapi', ScalarNormalizer::class) + ->addTag('normalizer', ['priority' => 5]); + } } /** diff --git a/src/Normalizer/ScalarNormalizer.php b/src/Normalizer/ScalarNormalizer.php new file mode 100644 index 0000000..6648c34 --- /dev/null +++ b/src/Normalizer/ScalarNormalizer.php @@ -0,0 +1,42 @@ +formats); + } + + /** + * {@inheritdoc} + */ + public function normalize($object, $format = NULL, array $context = []) { + $value = new FieldItemNormalizerValue(['value' => $object]); + return new FieldNormalizerValue([$value], 1); + } + + /** + * {@inheritdoc} + */ + public function denormalize($data, $class, $format = NULL, array $context = []) { + throw new UnexpectedValueException('Denormalization not implemented for JSON API'); + } + +} \ No newline at end of file