diff --git a/UPGRADE.md b/UPGRADE.md index a4fae0b..cbe17f1 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -2,6 +2,7 @@ ## 4.0.9 - [BUGFIX] fixed document deletion [see more](https://github.com/dachcom-digital/pimcore-dynamic-search/pull/108) +- [IMPROVEMENT] allow `data_transformer` to accept `null` values and handle null resource field transformers ## 4.0.8 - [IMPROVEMENT] `dynamic_search.element_listener_options.allowed_document_types` added, read more about it [here](./docs/01_DispatchWorkflow.md#listener) ## 4.0.7 diff --git a/src/Document/Definition/DocumentDefinition.php b/src/Document/Definition/DocumentDefinition.php index 71d1701..eb2016b 100644 --- a/src/Document/Definition/DocumentDefinition.php +++ b/src/Document/Definition/DocumentDefinition.php @@ -67,7 +67,7 @@ public function addOptionFieldDefinition(array $definition): static $resolver = new OptionsResolver(); $resolver->setRequired(['name', 'data_transformer']); $resolver->setAllowedTypes('name', ['string']); - $resolver->setAllowedTypes('data_transformer', ['array']); + $resolver->setAllowedTypes('data_transformer', ['array', 'null']); try { $options = $resolver->resolve($definition); @@ -100,7 +100,7 @@ public function addSimpleDocumentFieldDefinition(array $definition): static $resolver->setRequired(['name', 'index_transformer', 'data_transformer']); $resolver->setAllowedTypes('name', ['string']); $resolver->setAllowedTypes('index_transformer', ['array']); - $resolver->setAllowedTypes('data_transformer', ['array']); + $resolver->setAllowedTypes('data_transformer', ['array', 'null']); try { $options = $resolver->resolve($definition); diff --git a/src/Generator/IndexDocumentGenerator.php b/src/Generator/IndexDocumentGenerator.php index 0c7303c..e7f3401 100644 --- a/src/Generator/IndexDocumentGenerator.php +++ b/src/Generator/IndexDocumentGenerator.php @@ -180,9 +180,15 @@ protected function processDocumentIndexTransformerField( /** * @throws \Exception */ - protected function dispatchResourceFieldTransformer(array $options, string $dispatchTransformerName, ResourceContainerInterface $resourceContainer): mixed + protected function dispatchResourceFieldTransformer(?array $options, string $dispatchTransformerName, ResourceContainerInterface $resourceContainer): mixed { $fieldTransformerName = $options['type']; + + // it's not a source field + if ($fieldTransformerName === null) { + return null; + } + $fieldTransformerConfiguration = $options['configuration']; $fieldTransformer = $this->transformerManager->getResourceFieldTransformer($dispatchTransformerName, $fieldTransformerName, $fieldTransformerConfiguration);