* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ declare(strict_types=1); namespace ApiPlatform\Metadata\Resource; use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter; /** * @internal */ trait DeprecationMetadataTrait { private $camelCaseToSnakeCaseNameConverter; public function getKeyValue(string $key, $value) { if (!$this->camelCaseToSnakeCaseNameConverter) { $this->camelCaseToSnakeCaseNameConverter = new CamelCaseToSnakeCaseNameConverter(); } if ('attributes' === $key) { trigger_deprecation('api-platform/core', '2.7', 'The "attributes" option is deprecated and will be renamed to "extra_properties".'); $key = 'extra_properties'; } elseif ('iri' === $key) { trigger_deprecation('api-platform/core', '2.7', 'The "iri" is deprecated and will be renamed to "types".'); $key = 'types'; $value = [$value]; } elseif ('validation_groups' === $key) { trigger_deprecation('api-platform/core', '2.7', 'The "validation_groups" is deprecated and will be renamed to "validation_context" having an array with a "groups" key.'); $key = 'validation_context'; $value = ['groups' => $value]; } elseif ('access_control' === $key) { $key = 'security'; trigger_deprecation('api-platform/core', '2.7', 'The "access_control" option is deprecated and will be renamed to "security".'); } elseif ('access_control_message' === $key) { $key = 'security_message'; trigger_deprecation('api-platform/core', '2.7', 'The "access_control_message" option is deprecated and will be renamed to "security_message".'); } elseif ('path' === $key) { $key = 'uri_template'; trigger_deprecation('api-platform/core', '2.7', 'The "path" option is deprecated and will be renamed to "uri_template".'); // Transform default value to an empty array if null } elseif (\in_array($key, ['denormalization_context', 'normalization_context', 'hydra_context', 'openapi_context', 'order', 'pagination_via_cursor', 'exception_to_status'], true)) { if (null === $value) { $value = []; } elseif (!\is_array($value)) { $value = [$value]; } } elseif ('route_prefix' === $key) { $value = \is_string($value) ? $value : ''; } elseif ('swagger_context' === $key) { trigger_deprecation('api-platform/core', '2.7', 'The "swagger_context" option is deprecated and will be removed, use "openapi_context".'); $key = 'openapi_context'; $value = $value ?? []; } elseif ('query_parameter_validation_enabled' === $key) { $value = !$value ? false : $value; // GraphQl related keys } elseif (\in_array($key, ['collection_query', 'item_query', 'mutation'], true)) { trigger_deprecation('api-platform/core', '2.7', 'To specify a GraphQl resolver use "resolver" instead of "mutation", "item_query" or "collection_query".'); $key = 'resolver'; } elseif ('filters' === $key) { $value = null === $value ? [] : $value; } elseif ('graphql' === $key) { trigger_deprecation('api-platform/core', '2.7', 'The "graphql" option is deprecated and will be renamed to "graphQlOperations".'); $key = 'graphQlOperations'; } elseif ('identifiers' === $key) { $key = 'uriVariables'; } elseif ('doctrine_mongodb' === $key) { $key = 'extra_properties'; $value = ['doctrine_mongodb' => $value]; } return [$this->camelCaseToSnakeCaseNameConverter->denormalize($key), $value]; } }